2011-11-11 140 views
2

我有一個現有的數據庫已設置(無論何種原因??)將日期時間存儲爲字符串。我需要運行一個查詢,以查找在特定日期範圍內輸入但沒有任何運氣的記錄。SQL Server - 存儲爲字符串的查詢日期時間

字符串字段格式化爲1/25/2007 - 4:39 PM。我已經嘗試了下面的查詢,但當然不起作用。任何幫助,將不勝感激。

SELECT ID, CUSTOMER, ADD1, ADDZ, CITY, STATE, LASTD, ORDNUM 
FROM dcar 
WHERE (STATE = N'OR') AND (CAST(dcar.LASTD AS datetime) BETWEEN convert(smalldatetime, '10/01/2011', 101) AND convert(smalldatetime, '10/31/2011', 101)) 

PS - 我不知道爲什麼開發者決定以這種方式存儲日期!

回答

1

我認爲你應該能夠施展領域爲日期,如果您刪除的日期和時間之間的破折號與REPLACE功能,像這樣:

SELECT ID, CUSTOMER, ADD1, ADDZ, CITY, STATE, LASTD, ORDNUM 
FROM dcar 
WHERE (STATE = N'OR') AND 
CAST(REPLACE(dcar.LASTD, ' -', '') AS DATETIME) BETWEEN '10/01/2011' AND '10/31/2011' 
+0

非常感謝PaulStock!這就像一個魅力! – user10001110101

0

看起來你並沒有真正使用存儲的值的時間部分。如果是這樣,這可能適用於您:

使用字符串操作函數(http://msdn.microsoft.com/en-us/library/ms181984.aspx)來提取字符串的日期部分,然後使用convert()將其轉換爲日期時間。例如,您可以使用CHARINDEX()來查找「 - 」的索引,然後使用SUBSTRING()來獲取到達該點的字符。然後使用convert,按照http://msdn.microsoft.com/en-us/library/ms187928.aspx中記錄的相應樣式值傳遞。

相關問題