0

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

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

但结果并没有给出准确的结果,即它给出的日期早于 2013 年 7 月 18 日。

我做错了什么吗?

4

3 回答 3

2

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

select * from [003 AccptReg].[dbo].[SysData1]
where CAST([RegDate_Sys] AS DATE) > CAST('18 jul 2013' AS DATE)
于 2013-09-11T13:36:46.977 回答
1

问题是您将日期设置为varchar,并且在进行比较时没有将其转换为日期。数据库不知道您将数据视为日期,并且只会将它们作为字符串进行比较,因此 example'2 jan 1736'将大于'18 jul 2013'because 2come after 1

最好的办法是,如果您可以将数据存储为datetime值(或date),那么在比较这些值时就不需要进行转换,这样可以提供更好的性能。

如果这不可能,请在查询中进行转换:

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

根据服务器上的设置,您可能还需要以'18 jul 2013'相同的方式进行转换,以便数据库将其正确理解为日期。

于 2013-09-11T13:38:06.137 回答
0

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

 select * from [003 AccptReg].[dbo].[SysData1]
 where convert(datetime,[RegDate_Sys]) >convert(datetime,'18 jul 2013')
于 2013-09-11T13:36:18.340 回答