2010-01-11 34 views
7

全部,MYSQL - 檢索日期之間的時間戳

我有一個名爲timestamp的列的MYSQL表。它的數據類型爲DATETIME,其值爲「2009年10月1日3:25:08」,「2009年10月1日3:30:05」,「2009年10月4日下午3:40:01」等。

我想寫一個SQL查詢來選擇兩個日期之間的時間戳字段發生的歷史中的所有值..是這樣的:

select timestamp from tablename where timestamp >= userStartDate and timestamp <= userEndDate 

的userInput日期將不會有時間部分。可否請您建議正確的MySQL查詢語法呢? 感謝

+0

「它是datetime屬性」是否意味着它有'DATETIME'數據類型? – Quassnoi 2010-01-11 21:42:01

+0

是的。這是正確的 – Jake 2010-01-11 21:45:04

回答

14
SELECT timestamp 
FROM tablename 
WHERE timestamp >= userStartDate 
     AND timestamp < userEndDate + INTERVAL 1 DAY 

這將選擇每個記錄夏暉ng日期部分在userStartDateuserEndDate之間,前提是這些字段的類型爲DATE(不含時間部分)。

如果來作爲字符串的開始和結束日期,使用STR_TO_DATE從任何給定的格式轉換:使用BETWEEN與日期或時間值時

SELECT timestamp 
FROM tablename 
WHERE timestamp >= STR_TO_DATE('01/11/2010', '%m/%d/%Y') 
     AND timestamp < STR_TO_DATE('01/12/2010', '%m/%d/%Y') + INTERVAL 1 DAY 
+0

嗯..可以userStartDate格式爲「10/01/2009」? (mm/dd/yyyy) – Jake 2010-01-11 21:29:47

8
SELECT timestamp 
FROM myTable 
WHERE timestamp BETWEEN startDate AND endDate 

爲了達到最佳效果,你應該使用CAST()將這些值顯式轉換爲所需的數據類型。示例:如果將DATETIME與兩個DATE值進行比較,請將DATE值轉換爲DATETIME值。如果在與DATE比較中使用字符串常量(例如'2001-1-1'),則將字符串強制轉換爲DATE

-http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between

+1

如果'startDate'和'endDate'都是'2010年1月11日',這將只選擇'timestamp = Jan 11,2010 00:00:00'的記錄, 1月11日'在日期部分。 – Quassnoi 2010-01-11 21:39:17

+0

你是對的,Quassnoi。如果用戶數據可能會出現這種情況,則可以添加24小時(如您在示例中所做的那樣)。我曾假設用戶會在查詢本身中使用dateTime值。 – Sampson 2010-01-11 21:52:51

4

的userInput日期將不會有時間戳。您可以將用戶輸入轉換爲TIMESTAMP WITH:

mysql> SELECT UNIX_TIMESTAMP('2007-11-30 10:30:19'); 
     -> 1196440219 

你的查詢可以成爲:

select timestamp from tablename 
where timestamp >= UNIX_TIMESTAMP(userStartDate) 
and timestamp <= UNIX_TIMESTAMP(userEndDate) 
2

如果你想找兩個時間戳之間的查詢的事件,對於一個日曆或一些地方開始和結束都存儲爲一個時間戳,你可以使用這個

$qry = "SELECT * 
     FROM `table` 
     WHERE '$today_start' >= `event_start` 
      AND '$today_start' <= `event_end`";