我有一个SQL语句,它返回以下错误:
将varchar数据类型转换为日期时间数据类型会导致超出范围的值。
SELECT * FROM eBV_Platz
WHERE (ADRID = 4436) AND (ID <> 5) AND (Status = 1)
AND (CONVERT(DATETIME, '01.03.2014', 102) >= PlaceFrom)
AND (CONVERT(DATETIME, '01.03.2014') <= PlaceTo)
OR (CONVERT(DATETIME, '31.03.2014') >= PlaceFrom)
AND (CONVERT(DATETIME, '31.03.2014') <= PlaceTo)
但是这个工作正常,唯一的区别是日期值:
SELECT * FROM eBV_Platz
WHERE (ADRID = 4436) AND (ID <> 5) AND (Status = 1)
and (CONVERT(DATETIME, '01.01.2000', 102) >= PlaceFrom)
AND (CONVERT(DATETIME, '01.01.2000') <= PlaceTo)
OR (CONVERT(DATETIME, '01.06.2001') >= PlaceFrom)
AND (CONVERT(DATETIME, '01.06.2001') <= PlaceTo)
我真的不明白这一点。有人能帮助我吗?
答案 0 :(得分:1)
我打赌第二个不能正常工作,而是将你的日期转换为06年1月1日和1月1日。
您需要提示您使用的是日月格式。
尝试改为:
(CONVERT(DATETIME, '31.03.2014', 103)
103(from MSDN)将日期解释为dd/mm/yy
正如@AlexK在评论中指出的那样,这些并不需要真正转换。你可以简单地使用字符串,只要它们的格式更好。
我的假设是你正在使用MSSQL。对于不同的平台,语法会有所不同。
答案 1 :(得分:0)
如评论中所述,使用ISO 8601 date format指定日期(yyyy-mm-ddThh:mm:ss[.mmm]
)。
这会将'31.03.2014'
更改为'2014-03-31T00:00:00.000'
并消除任何歧义。