/ / Проверка за дата между датите w / SQL - sql, между

Проверка за дата между датите w / SQL - sql, между

Получавам грешка при изпълнението на тази заявка:

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.

Отговори:

2 за отговор № 1

Трябва да CAST или CONVERT вашия YEAR(GETDATE()) при varchar (4), когато се опитвате да го комбинирате с текст, в противен случай той се опитва да преобразува текста вместо 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 за отговор № 2

JamieSee е правилно да го хвърляVARCHAR (4). По-добър начин би бил да се форматира с недвусмислени дати. SQL винаги ще работи 6/30/2012 като 30 юни 2012 г., но е 1/7/2012 на 1 юли (американски формат) или 7-ми януари (формат във Великобритания)?

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