2012-05-21 95 views
1

我正在使用此查詢來獲取兩個日期之間的行,但我沒有從數據庫中獲取行,它返回一個空集(在db中,我有那一天的行)SQL查詢返回兩個日期之間的行

查詢:

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' 

如果開始日期和結束日期相同,任何一個PLZ都可以告訴我如何獲得第17條記錄。

在此先感謝。

+3

您應該指定要使用 – Richard

+1

查詢的數據庫好像還行。 date_email_sent的數據類型是什麼? –

+0

你是說** SQL **(結構化查詢語言),你真的是指Microsoft ** SQL Server **(實際的數據庫產品)?或者你使用別的東西。 –

回答

0
select email 
from users 
where date_email_sent >= '17-May-12' AND date_email_sent < '18-May-12' 
1

在SQL Server中,你應該這樣做。

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

如果您使用別的東西,則必須用其他東西替換dateadd

+1

通過「BETWEEN」方法獲得此方法的好處? – Zapnologica

+1

@Zapnologica最大的好處是它會在特定的一天返回所有**行。 [此答案](http://stackoverflow.com/a/10680887/569436)不會返回具有當天最後一秒的時間值的行。更多信息在這裏[BETWEEN和魔鬼有什麼共同之處?](http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and-the-devil-have-在-common.aspx) –

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點,所以如果你想比較的日期會出現一個問題具有日期時間值

1

當您指定沒有時間部分的日期時,時間將自動假定爲上午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' 

因此,大家可以看到,這兩個時間是相同的,當然也有在指定的時間間隔沒有記錄。

如果你想在第一天的所有記錄,您需要從午夜到測量,直到半夜,第二天:

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。當你寫 BETWEEN '17 - 5月-12' 和'17 - 5月-12' 所以你沒有那麼在日期數據類型它視爲

'17 - 5月,12條提到的時間

0

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

所以你的範圍是有限的,這就是爲什麼你沒有得到記錄。 你應該提及時間以獲得同一日期的記錄。 在oracle中,你可以這樣寫

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') 
相關問題