2

次の簡単なクエリで問題が発生しました

SELECT * FROM users WHERE Created = '28/02/2013'

問題は、列CREATEDdatetimeデータ型であるため、タイムスタンプが0:00:0である限り、クエリは正常に実行されます。タイムスタンプが12:00に設定されている場合、クエリは結果セットを返しません。

なぜですか?

ありがとう

4

4 に答える 4

3

時間を指定していないため、次のことを前提としています。

SELECT * FROM users WHERE Created = '28/02/2013 00:00:00'

一日中必要な場合は、時間の範囲が必要です。

SELECT * 
FROM users 
WHERE Created >= '20130228' AND Created < '20130301'

また、日付には、他の形式ではなく、あいまいでない形式 ( 'YYYYMMDD') を使用してください。

于 2013-02-28T14:21:14.730 に答える
1
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'

そして、これはインデックスを使用します

于 2013-02-28T14:20:09.753 に答える
1

時間を考慮する必要がない場合: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
于 2013-02-28T14:21:57.713 に答える
-1

列を日付に変換してから比較する必要があります

SELECT * FROM users WHERE CONVERT(VARCHAR(11), Created, 106) = '28 Feb 2013'
于 2013-02-28T14:20:28.220 に答える