28. november 2013 - 16:58
Der er
1 kommentar
Problem med CONVERT datetime fejl
Jeg prøver at køre nedenstående query, og får en fejl når en dato er angivet om '00.00.0000', hvilket er logisk nok da den er uden for daterange. Men hvordan skriver jeg mig ud af det i nedenstående kode?
UPDATE tblXSAP_AnnuityMasterData_Sandbox
SET tblXSAP_AnnuityMasterData_Sandbox.Contract =
(SELECT TOP 1 RIGHT(ContractNr, 8)
FROM [BASS].[dbo].[tblXSAP_Contracts]
WHERE
CONVERT(date, '01' + '.' + Right(tblXSAP_AnnuityMasterData_Sandbox.FiscPeriod, 2) + '.' + Right(tblXSAP_AnnuityMasterData_Sandbox.FiscYear, 4), 104)
BETWEEN CONVERT(date, '01' + '.' + RIGHT(tblXSAP_Contracts.ValidFrom, LEN(tblXSAP_Contracts.ValidFrom) - 3), 104)
AND CONVERT(date, '01' + '.' + RIGHT(tblXSAP_Contracts.ValidTo, LEN(tblXSAP_Contracts.ValidTo) - 3), 104)
AND tblXSAP_AnnuityMasterData_Sandbox.SerialNumber = tblXSAP_Contracts.SerialNumber
ORDER BY CONVERT(date, tblXSAP_Contracts.ValidFrom, 104) DESC)
FROM tblXSAP_AnnuityMasterData_Sandbox
26. januar 2015 - 18:28
#1
Da ingen af felterne synes at være gemt som datofelter (hvilket er lidt crazy, IMHO -- især at gemme dem i dansk format, som ikke umiddelbart kan sorteres), kan du vel bare behandle dem som strenge:
UPDATE tblXSAP_AnnuityMasterData_Sandbox
SET tblXSAP_AnnuityMasterData_Sandbox.Contract =
(SELECT TOP 1 RIGHT(ContractNr, 8)
FROM [BASS].[dbo].[tblXSAP_Contracts]
WHERE Right(tblXSAP_AnnuityMasterData_Sandbox.FiscYear, 4)+Right(tblXSAP_AnnuityMasterData_Sandbox.FiscPeriod, 2)
BETWEEN RIGHT(tblXSAP_Contracts.ValidTo,4)+SUBSTRING(tblXSAP_Contracts.ValidTo,4,2)
AND RIGHT(tblXSAP_Contracts.ValidTo,4)+SUBSTRING(tblXSAP_Contracts.ValidTO,4,2)
AND tblXSAP_AnnuityMasterData_Sandbox.SerialNumber = tblXSAP_Contracts.SerialNumber
ORDER BY RIGHT(tblXSAP_Contracts.ValidFrom,4)+SUBTRING(tblXSAP_Contracts.ValidFrom,4,2)+LEFT(tblXSAP_Contracts.ValidFrom,2) DESC)
FROM tblXSAP_AnnuityMasterData_Sandbox
(eller noget lign.)
Bemærk, at jeg har smidt '01' væk, i join kriteriet, da det ikke reelt bruges der.