次の簡単なクエリで問題が発生しました
SELECT * FROM users WHERE Created = '28/02/2013'
問題は、列CREATED
がdatetime
データ型であるため、タイムスタンプが0:00:0である限り、クエリは正常に実行されます。タイムスタンプが12:00に設定されている場合、クエリは結果セットを返しません。
なぜですか?
ありがとう
次の簡単なクエリで問題が発生しました
SELECT * FROM users WHERE Created = '28/02/2013'
問題は、列CREATED
がdatetime
データ型であるため、タイムスタンプが0:00:0である限り、クエリは正常に実行されます。タイムスタンプが12:00に設定されている場合、クエリは結果セットを返しません。
なぜですか?
ありがとう
時間を指定していないため、次のことを前提としています。
SELECT * FROM users WHERE Created = '28/02/2013 00:00:00'
一日中必要な場合は、時間の範囲が必要です。
SELECT *
FROM users
WHERE Created >= '20130228' AND Created < '20130301'
また、日付には、他の形式ではなく、あいまいでない形式 ( 'YYYYMMDD'
) を使用してください。
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'
そして、これはインデックスを使用します
時間を考慮する必要がない場合: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
列を日付に変換してから比較する必要があります
SELECT * FROM users WHERE CONVERT(VARCHAR(11), Created, 106) = '28 Feb 2013'