2

このクエリを使用して2つの日付間の行を取得していますが、データベースから行を取得していません。空のセットを返します(dbにはその日の行があります)

クエリ:

select email 
from users
where date_email_sent between '17-May-12' AND '17-May-12'

以下のクエリを試してみると、17行目だけになっています

クエリ:

select email
from users
where date_email_sent between '17-May-12' AND '18-May-12'

開始日と終了日が同じ場合、17 番目のレコードだけを取得する方法を教えてください。

前もって感謝します。

4

5 に答える 5

6

date_email_sent には日時の値がありますか? 2012-05-17 09:30:00.000 のような列の値に日付と時刻の両方が含まれている場合、where 句で時刻を日付値と一緒に配置する必要がある場合があります。

例えば

where date_email_sent between '17-May-12 00:00:00.000' AND '17-May-12 23:59:59.000'

または、フィールドの日付値のみを確認できます

where DATEADD(dd, 0, DATEDIFF(dd, 0, date_email_sent )) between '17-May-12' AND '17-May-12'

日付のみを入力すると、SQLは常に午前12時と見なすため、日付と日時の値を比較する場合に問題が発生します

于 2012-05-21T07:13:30.720 に答える
2

時刻部分なしで日付を指定すると、時刻は自動的に午前 12:00 と見なされます。だからあなたが書くとき

date_email_sent between '17-May-12' AND '17-May-12'

これは事実上、

date_email_sent between '17-May-12 12:00AM' AND '17-May-12 12:00AM'

ご覧のとおり、2 つの時間は同一であり、当然、指定された間隔にはレコードがありません。

ある日のすべてのレコードが必要な場合は、午前 0 時から翌日の午前 0 時まで測定する必要があります。

date_email_sent >= '17-May-12 12:00AM' and date_email_sent < '18-May-12 12:00AM'

あるいは単に:

date_email_sent >= '17-May-12' and date_email_sent < '18-May-12'

または、日付の日の部分を抽出して、正しい値を確認することもできます。特定の日付処理関数は、dbms によって異なります。

于 2012-05-21T07:15:35.007 に答える
1

SQL Server では、このようにする必要があります。

select email 
from users
where date_email_sent >= '20120517' and 
      date_email_sent < dateadd(day, 1, '20120517')

他のものを使用する場合は、他のものに交換dateaddする必要があります。

于 2012-05-21T07:12:30.593 に答える
0
select email 
from users
where date_email_sent >= '17-May-12' AND date_email_sent < '18-May-12'
于 2012-05-21T07:11:17.907 に答える
0

BETWEEN '17-May-12' AND '17-May-12' と書くと、時間について言及していないため、Date データ型では次のように見なされます

'17-May-12 00:00:00' AND '17-May-12 00:00:00'

範囲が限られているため、レコードを取得できませんでした。同じ日付のレコードを取得するには、時間についても言及する必要があります。オラクルでは、このように書くことができます

BETWEEN to_date('dd-mm-yyyy hh24:mi','17-05-12 00:00') AND to_date('dd-mm-yyyy hh24:mi','17-05-12 23:59')
于 2012-05-21T07:17:01.933 に答える