/ / Check for Date Entre Datas com SQL - sql, entre

Verificar data entre datas com SQL - sql, entre

Eu estou recebendo um erro ao executar esta consulta:

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.

Respostas:

2 para resposta № 1

Você precisa CAST ou CONVERTER o seu YEAR(GETDATE()) para varchar (4) ao tentar combiná-lo com texto, caso contrário, ele tenta converter o texto em um 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 para resposta № 2

JamieSee está correto sobre lançá-lo paraVARCHAR (4). Uma maneira melhor seria formatar usando datas não ambíguas. O SQL sempre funcionará em 30/06/2012 em 30 de junho de 2012, mas será em 1/7/2012 em 1º de julho (formato dos EUA) ou em 7 de janeiro (formato no Reino Unido)?

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