/ / Skontrolujte dátum medzi dátumami w / SQL - sql, medzi

Skontrolujte dátum medzi dátami w / SQL - sql, medzi

Pri spustení tohto dotazu sa vyskytla chyba:

SELECT "06/30/" +
CASE WHEN GETDATE() BETWEEN Cast("1/01/" + YEAR(GETDATE()) + " 12:01:01" As DateTime) And Cast("6/30/" + YEAR(GETDATE()) + " 12:01:01" as DateTime)
THEN CAST(
YEAR(DATEADD(YY, 2, GETDATE())) AS VARCHAR(4))
WHEN GETDATE() BETWEEN Cast("7/01/" + YEAR(GETDATE()) + " 12:01:01" As DateTime) And Cast("12/31/" + YEAR(GETDATE()) + " 12:01:01" as DateTime)
THEN CAST(
YEAR(DATEADD(YY, 3, GETDATE())) AS VARCHAR(4))
END
AS DateEnding FOR XML RAW

Conversion failed when converting the varchar value "1/01/" to data type int.

odpovede:

2 pre odpoveď č. 1

Musíte CAST alebo CONVERT svoje YEAR(GETDATE()) na varchar (4) pri pokuse o spojenie s textom, inak sa pokúša konvertovať text na int.

SELECT "06/30/" +
CASE WHEN GETDATE() BETWEEN Cast("1/01/" + CAST(YEAR(GETDATE()) AS VARCHAR(4)) + " 12:01:01" As DateTime) And Cast("6/30/" + CAST(YEAR(GETDATE()) AS VARCHAR(4)) + " 12:01:01" as DateTime)
THEN CAST(
YEAR(DATEADD(YY, 2, GETDATE())) AS VARCHAR(4))
WHEN GETDATE() BETWEEN Cast("7/01/" + CAST(YEAR(GETDATE()) AS VARCHAR(4)) + " 12:01:01" As DateTime) And Cast("12/31/" + CAST(YEAR(GETDATE()) AS VARCHAR(4)) + " 12:01:01" as DateTime)
THEN CAST(
YEAR(DATEADD(YY, 3, GETDATE())) AS VARCHAR(4))
END
AS DateEnding FOR XML RAW

0 pre odpoveď č. 2

JamieSee má pravdu o tom, že ho odovzdáVARCHAR (4). Lepším spôsobom by bolo formátovanie s použitím jednoznačných dátumov. SQL bude vždy pracovať od 30.6.2012 do 30. júna 2012, ale je 1. 7. 2012 1. júla (formát US) alebo 7. január (formát UK)?

SELECT "06/30/" +
CASE WHEN GETDATE() BETWEEN Cast(CAST(YEAR(GETDATE()) AS VARCHAR(4)) + "-01-01 12:01:01" As DateTime) And Cast(CAST(YEAR(GETDATE()) AS VARCHAR(4)) + "-06-30 12:01:01" as DateTime)
THEN CAST(
YEAR(DATEADD(YY, 2, GETDATE())) AS VARCHAR(4))
WHEN GETDATE() BETWEEN Cast(CAST(YEAR(GETDATE()) AS VARCHAR(4)) + "-07-01 12:01:01" As DateTime) And Cast(CAST(YEAR(GETDATE()) AS VARCHAR(4)) + "-12-31 12:01:01" as DateTime)
THEN CAST(
YEAR(DATEADD(YY, 3, GETDATE())) AS VARCHAR(4))
END
AS DateEnding FOR XML RAW