关于sql server 2008:SQL:计算格式化为varchar的日期

SQL: Counting dates formatted as varchar

任务:

我需要计算2011年7月1日之后添加的表中的每条记录。

信息:

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

我尝试过的方法:

我尝试了以下查询:

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

不幸的是,它会计算月份大于07的任何日期,而与年份或日期无关。我对如何格式化查询以使其正确读取日期而不是按ascii排序感到困惑。在我的研究中,我发现了CAST和CONVERT选项,但是不确定如何使用它们,或者如果有的话应该使用哪一个。我是SQL的新手,请确保我不会弄乱表中的数据。我只需要获取上面指定的计数,而无需以任何方式更改表中的数据。在这方面的任何帮助将不胜感激。预先感谢。


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

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


(1)请勿使用mm/dd/yyyy作为日期格式。使用安全明确的格式;我信任的DATETIME/SMALLDATETIME唯一一个是YYYYMMDD

(2)根据所需的精度将表中的数据类型更改为DATETIME/SMALLDATETIME/DATE。然后`WHERE date_added> ='20110701'就可以了(如果存在的话,在该列上使用索引)。

(3)如果您不能更改数据类型,则以下内容也可以正常工作(尽管将不使用索引):

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

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

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


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