2012-02-14 38 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'