需要识别高于给定日期的数字

时间:2013-09-11 13:32:28

标签: sql sql-server date

我在表格中有一个日期列。日期列位于varchar中。我想从该日期列中识别特定日期范围。我的查询是这样的:

SELECT * 
FROM [003 AccptReg].[dbo].[SysData1]
WHERE [RegDate_Sys] > '18 jul 2013'

但结果并未给出准确的结果,即它给出了2013年7月18日之前的日期。

我有什么问题吗?

3 个答案:

答案 0 :(得分:2)

对于日期列,您应该比较为 DATE

select * from [003 AccptReg].[dbo].[SysData1]
where CAST([RegDate_Sys] AS DATE) > CAST('18 jul 2013' AS DATE)

答案 1 :(得分:1)

问题是您的日期为varchar,并且不会将其转换为您进行比较时的日期。数据库不知道您将数据视为日期,并且只是将它们作为字符串进行比较,因此例如'2 jan 1736'将大于'18 jul 2013',因为2位于{{1}之后}}

最好的情况是,如果您可以将数据存储为1值(或datetime),则在比较值时无需进行转换,从而提供更好的性能

如果无法做到,请在查询中进行转换:

date

根据服务器上的设置,您可能还需要以相同的方式转换select * from [003 AccptReg].[dbo].[SysData1] where convert(datetime, [RegDate_Sys], 106) > '18 jul 2013' ,以便数据库将其正确理解为日期。

答案 2 :(得分:0)

将日期转换为日期时间格式,然后比较:

 select * from [003 AccptReg].[dbo].[SysData1]
 where convert(datetime,[RegDate_Sys]) >convert(datetime,'18 jul 2013')