2012-02-14 42 views
0

任务计数日期:SQL:格式化为varchar

我需要这是07/01/2011后添加一个表来计算每一条记录。

的信息:

存在其中被格式化为VARCHAR并含有格式mm/dd/yyyy的日期表 “DATE_ADDED” 的列。

我已经试过:

我尝试以下查询:

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

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

+1

? http://stackoverflow.com/a/4759039/284240 – 2012-02-14 18:15:12

+0

数据库是我们从供应商处购买的Web应用程序的一部分。我整个上午都在诅咒他们同样的问题。 – rhuarch 2012-02-14 19:29:36

回答

2

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

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

非常感谢!那就是诀窍。 – rhuarch 2012-02-14 19:27:48

0

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

+1

好吧,要迂腐,可以比较varchar,如果日期以这种格式存储,就不能准确比较。 – 2012-02-14 19:21:16

0

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

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

你的第二个'CONVERT'是错误的 – Lamak 2012-02-14 18:21:38

+0

你并不需要在右侧转换(即使语法测试和正确的)。 – 2012-02-14 19:20:24

1

(1)不要使用mm/dd/yyyy作为日期格式。使用安全和明确的格式; DATETIME/SMALLDATETIME我信任的唯一一个是YYYYMMDD。 (2)根据所需的准确性,将表中的数据类型更改为DATETIME/SMALLDATETIME/DATE。然后`WHERE date_added> ='20110701'将工作得很好(如果存在的话,将使用该列上的索引)。

(3)如果你不能改变的数据类型,那么下面的工作也很不错(虽然没有指数将使用):你为什么要存储日期为varchar

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