SQL Server将varchar转换为datetime以选择日期范围

时间:2012-08-28 13:43:41

标签: sql-server datetime

我需要从MSSQL数据库中选择日期范围,但是s.ended字段尚未设置为日期时间字段。它已设置为varchar,存储日期的格式为d/m/Y

我已尝试过以下的条款,但我收到以下错误消息。有没有人知道如何在不改变数据库设计的情况下解决这个问题?

Where子句:

WHERE  
   (S.ended > CONVERT(DateTime, '28/07/2012 00:00:01', 103)) 
   AND (S.ended < CONVERT(DateTime, '28/08/2012 00:00:01', 103))

错误讯息:

  

将varchar数据类型转换为日期时间数据类型会导致超出范围值。

3 个答案:

答案 0 :(得分:2)

试试这个:

WHERE  
   (CONVERT(DateTime, S.ended, 103) > CONVERT(DateTime, '28/07/2012 00:00:01', 103)) 
   AND (CONVERT(DateTime, S.ended, 103) < CONVERT(DateTime, '28/08/2012 00:00:01', 103))

答案 1 :(得分:1)

在与S.ended值进行比较之前,Datetime可能没有采用正确的格式。

首先将该值转换为Datetime然后进行比较。

答案 2 :(得分:-1)

WHERE (S.ended > CONVERT(DateTime, '28/07/2012 00:00:01', 103)) AND (S.ended < CONVERT(DateTime, '28/08/2012 00:00:01', 103))

可能会将日期更改为美国日期而不是 '28 / 07/2012 00:00:01'尝试 '07 / 28/2012 00:00:01'< /强>