我想從表中選擇對應於特定日期的所有行。 我有存儲在2010-08-18 04:43:00
模式中的時間戳。 如果我想選擇一天內所有行,我該如何查詢表格?查詢mysql:從時間戳中選擇
我能想到的一種方法是獲取當天的時間戳,將其轉換爲Unix時間戳,然後查詢表。但這聽起來很多工作。有沒有更容易的選擇?
非常感謝。
我想從表中選擇對應於特定日期的所有行。 我有存儲在2010-08-18 04:43:00
模式中的時間戳。 如果我想選擇一天內所有行,我該如何查詢表格?查詢mysql:從時間戳中選擇
我能想到的一種方法是獲取當天的時間戳,將其轉換爲Unix時間戳,然後查詢表。但這聽起來很多工作。有沒有更容易的選擇?
非常感謝。
邁克爾介紹的方法工作,但基於字符串,因此效率不高的基於整數的搜索。
我在創建兩個UNIX時間戳(一個用於00:00:00,一個用於23:59:59)和檢查以確定您是否在此時間內沒有看到問題。 (確保實際計算這兩個單獨的值以確保您考慮夏令時)。
你甚至可以使用MySQL來獲得這些值,如果你真的不想自己做(SELECT UNIX_TIMESTAMP("$Timestamp 00:00:00"), UNIX_TIMESTAMP("$Timestamp 23:59:59")
),然後使用這兩個值。
如果你有一個小的數據集,邁克爾上面的方法是好的。
+1基於非字符串,很好的信息:) – 2010-08-17 23:36:13
SELECT *
FROM `table_name`
WHERE `date_column` LIKE '2010-08-17 %';
或者:
SELECT *
FROM `table_name`
WHERE DAY(`date_column`) = 17
AND MONTH(`date_column`) = 08
AND YEAR(`date_column`) = 2010
LIMIT 0 , 30
參考:http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html
很簡單:
SELECT *
FROM `table_name`
WHERE DATE(`date_column`) = '2010-08-17';
注意,也只會是有效的,如果你的date_column
的類型是TIMESTAMP或DATETIME的。
編輯: 由於馬丁提出了與性能的一個點,你可能想試試這個,而是如果速度是一個問題(在一個巨大的數據集)。 BETWEEN
將使用任何可用的索引。
SELECT *
FROM `table_name`
WHERE `date_column` BETWEEN '2010-08-17 00:00:00' AND '2010-08-17 23:59:59';
在MySQL中是否可以運行? – 2010-08-18 00:22:48
我不太確定這一點。 – 2010-08-18 01:00:11
模式?存儲此模式的列的數據類型是什麼 - DATETIME或VARCHAR/etc? – 2010-08-17 23:18:41