SQL:计算格式为varchar的日期

时间:2012-02-14 18:12:19

标签: sql sql-server-2008

任务:

我需要计算在07/01/2011之后添加的表格中的每条记录。

的信息:

表“Date_added”中有一列格式为varchar,包含格式为mm / dd / yyyy的日期。

我尝试了什么:

我尝试了以下查询:

SELECT count(date_added) FROM Abatements_Doc WHERE date_added >= '07/01/2011'

不幸的是,它计算了月份大于07的任何日期,无论年份或日期。我不知道如何格式化我的查询以使其正确读取日期而不是ascii排序。在我的研究中,我发现了CAST和CONVERT选项,但我不确定如何使用它们,或者我应该使用哪一个。我对SQL非常陌生,并希望确保我不会弄乱表中的数据。我只需要获得上面指定的计数,而无需以任何方式更改表中的数据。在这方面的任何帮助将非常感谢。提前谢谢。

4 个答案:

答案 0 :(得分:2)

我没有测试过。但尝试转换语句。

SELECT count(date_added) 
FROM Abatements_Doc 
WHERE convert(datetime,date_added,1) >= convert(datetime,'07/01/2011',1)

答案 1 :(得分:1)

(1)不要使用mm/dd/yyyy作为日期格式。使用安全和明确的格式;我唯一信任的DATETIME/SMALLDATETIMEYYYYMMDD

(2)根据所需的准确度,将表格中的数据类型更改为DATETIME/SMALLDATETIME/DATE。然后`WHERE date_added> ='20110701'将正常工作(并将在该列上使用索引,如果存在的话)。

(3)如果你不能改变数据类型,那么以下也可以正常工作(虽然不会使用索引):

WHERE CONVERT(DATETIME, date_added, 101) >= '20110701'

答案 2 :(得分:0)

无法比较Varchar,请尝试将列更改为日期类型。

答案 3 :(得分:0)

date_added列值和目标日期转换为DATETIME并进行比较;如:

SELECT COUNT(1)
FROM Abatements_Doc
WHERE (CONVERT(datetime, date_added, 101)) >= CONVERT('07/01/2011', date_added, 101))