SQL日期时间转换错误

时间:2014-04-04 14:13:09

标签: sql datetime

我有一个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)

我真的不明白这一点。有人能帮助我吗?

2 个答案:

答案 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'并消除任何歧义。