我有以下簡單的查詢麻煩SQL Server日期時間和SQL
SELECT * FROM users WHERE Created = '28/02/2013'
問題是列CREATED
是datetime
數據類型,所以查詢,只要時間戳是0:00執行罰款: 0,如果時間戳設置爲12:00,那麼查詢不會返回結果集。
任何想法爲什麼?
感謝
我有以下簡單的查詢麻煩SQL Server日期時間和SQL
SELECT * FROM users WHERE Created = '28/02/2013'
問題是列CREATED
是datetime
數據類型,所以查詢,只要時間戳是0:00執行罰款: 0,如果時間戳設置爲12:00,那麼查詢不會返回結果集。
任何想法爲什麼?
感謝
SELECT * FROM users WHERE CAST(Created AS DATE) = '28/02/2013'
將修復它,但要小心,它禁用索引
SELECT * FROM users WHERE Created BETWEEN '28/02/2013 00:00' AND '28/02/2013 23:59'
,這將使用指數
因爲你沒有指定時間,所以它假設你正在做的:
SELECT * FROM users WHERE Created = '28/02/2013 00:00:00'
如果你想了整整一天,那麼你需要的時間範圍內:
SELECT *
FROM users
WHERE Created >= '20130228' AND Created < '20130301'
另外,請用日期格式不明確('YYYYMMDD'
),而不是其他格式。
當然,你的意思是ISO 8601標準( 「YYYY-MM-DD」)... – 2013-02-28 14:25:03
@DavidB不,我的意思''爲SQL Server YYYYMMDD''自也不含糊對RDBMS(datetime和date的數據類型)。 (儘管'YYYY-MM-DD'對於DATE數據類型也不是不明確的)。 – Lamak 2013-02-28 14:30:18
@DavidB:SQL Server對「DATETIME」的「ISO-8601」的解釋確實是** only **'YYYYMMDD'(** no破折號!**)。使用破折號 - 這將是「正常的」ISO-8601標準**對所有語言設置都不起作用** - 它**可以(並且將)例如失敗。 「德語」或「英國英國」(或幾乎任何歐洲語言)的語言設置... – 2013-02-28 15:43:59
如果你不需要考慮時間:嘗試created
字段轉換date
,然後比較結果爲;
SELECT * FROM users WHERE convert(date,Created) = '28/02/2013'
--this would be even better with iso date format (not culture specific)
SELECT * FROM users WHERE convert(date,Created) = '20130228' --yyyymmdd format
http://www.xkcd.com/1179/ – 2013-02-28 14:21:58