回答
通常它會是這樣:
SELECT *
FROM yourtable
WHERE yourtimetimefield>='2010-10-01'
AND yourtimetimefield< '2010-11-01'
但是因爲你有一個UNIX時間戳,你需要這樣的事:
SELECT *
FROM yourtable
WHERE yourtimetimefield>=unix_timestamp('2010-10-01')
AND yourtimetimefield< unix_timestamp('2010-11-01')
謝謝! (另外5個字符) – DRKM 2010-10-20 10:47:54
@merlinbeard這對於索引來說實際上是完全正常的,計算值是靜態的,可以直接與'yourtimefield'值進行比較。現在,如果您有'WHERE FROM_UNIXTIME(yourtimefield)> ='2010-10-01''這將不允許建立索引,因爲需要爲每一行計算與日期格式比較的值。話雖如此。對於大多數使用情況,我仍然會建議使用日期,日期時間,時間戳記字段類型而不是unix時間戳記。 – 2016-01-07 19:08:20
@MikeBrant:正確的觀察。這個表達式被計算一次並被摺疊成一個常量,並且仍然可以與'yourtimefield'上的索引匹配。 merlinbeard的評論之後,我立即收到了一些預言,表明人們經常在沒有完全理解他們投票的情況下投票。嘿,聽起來像政治:) – 2016-01-08 16:05:54
SELECT * FROM table WHERE col >= '2010-10-01' AND col <= '2010-10-31'
對不起,我應該提到它是一個unix時間戳,而不是一個mysql時間戳(重要的信息位錯過!) – DRKM 2010-10-20 10:30:53
我看到這篇文章,我的時間戳工作正常,我現在面臨的問題,如果調用它與一個連接它總是帶回返回零行 – 2014-10-06 09:13:03
那麼會發生什麼記錄,具有時間戳2010-10-31 09: 00:00'? – 2016-01-11 01:33:40
緊湊,靈活的方法對時間戳沒有小數秒將是:
SELECT * FROM table_name
WHERE field_name
BETWEEN UNIX_TIMESTAMP('2010-10-01') AND UNIX_TIMESTAMP('2010-10-31 23:59:59')
如果您使用的是小數秒和最新版本的MySQL,那麼您最好採用按照Wouter's answer使用>=
和<
運營商的方法。
這裏是具有分數第二精度(最大精度在使用中)定義的時間的字段的一個示例:
mysql> create table time_info (t_time time(6), t_datetime datetime(6), t_timestamp timestamp(6), t_short timestamp null);
Query OK, 0 rows affected (0.02 sec)
mysql> insert into time_info set t_time = curtime(6), t_datetime = now(6), t_short = t_datetime;
Query OK, 1 row affected (0.01 sec)
mysql> select * from time_info;
+-----------------+----------------------------+----------------------------+---------------------+
| 22:05:34.378453 | 2016-01-11 22:05:34.378453 | 2016-01-11 22:05:34.378453 | 2016-01-11 22:05:34 |
+-----------------+----------------------------+----------------------------+---------------------+
1 row in set (0.00 sec)
+1,用於避免爲每次比較轉換列。人們會希望這非常有效! – 2010-10-20 10:45:48
@Jimbo:不,「BETWEEN」在這裏並不是一個好的選擇,因爲它在兩端都是非包含的。 你必須寫'2010-10-01 00:00:00'和'2010-10-31 23:59:59'之間的東西才能得到正確的答案,並且希望不要使用毫秒。 此外,9月31日不存在,因爲9月只有30天。如果意思是「30」,那麼它是不正確的,因爲來自九月的數據將被返回。實際上,MySQL將這個解釋爲十月一日(非常整潔),這在這裏是正確的。我不確定爲什麼你會在9月31日寫它。 – 2016-01-08 16:01:47
@WoutervanNifterick不確定到底發生了什麼,但已修復。我已經添加了一個關於fsp的評論,因爲這是在他們有效之前寫的 – Cez 2016-01-08 19:35:02
只要有可能,應避免在where子句中施加功能柱:
SELECT *
FROM table_name
WHERE timestamp >= UNIX_TIMESTAMP('2010-10-01 00:00:00')
AND timestamp < UNIX_TIMESTAMP('2010-11-01 00:00:00');
在timestamp列中應用函數(例如,FROM_UNIXTIME(timestamp)= ...)會使索引變得更加困難。
此SQL查詢將爲您提取數據。它很容易和快速。
SELECT *
FROM table_name
WHERE extract(YEAR_MONTH from timestamp)="201010";
我可以看到有人對這個問題給出了很多評論。但我認爲,簡單使用LIKE
可能更容易從表中獲取數據。
SELECT * FROM table WHERE COLUMN LIKE '2013-05-11%'
使用LIKE
和發佈數據通配符搜索。希望這會解決你的問題。
編輯內容? – abhijitcaps 2016-12-07 02:14:02
如果你有一個MySQL時間戳,像2013-09-29 22:27:10
你可以做到這一點
select * from table WHERE MONTH(FROM_UNIXTIME(UNIX_TIMESTAMP(time)))=9;
轉換爲UNIX,然後使用UNIX時間函數來提取月份,在這種情況下,9九月份。
- 1. mysql日期時間範圍選擇
- 2. 選擇MySQL的時間戳範圍
- 3. MYSQL - 選擇日期範圍時出錯
- 4. 從python的時間戳列中選擇日期的範圍
- 5. MYSQL日期範圍和時間範圍
- 6. 選擇日期和時間範圍
- 7. php選擇日期時間範圍
- 8. 日期和時間範圍選擇器
- 9. Mysql從unixtime時間戳選擇日期範圍給出太多記錄
- 10. MYSQL:選擇時間範圍使用時間戳列和分組
- 11. MySql使用html日期輸入選擇帶日期時間的日期範圍
- 12. jQuery提示'時間範圍'(日期範圍選擇器)
- 13. PHP mysql選擇日期範圍
- 14. MySQL選擇日期範圍問題
- 15. MySQL的日期範圍選擇
- 16. 使用date_format選擇日期範圍MySQL
- 17. MySQL查詢選擇了日期範圍
- 18. MySQL選擇日期範圍,但也在
- 19. 日期範圍選擇器 - 24小時範圍選擇
- 20. 特定日期的日期選擇器的時間範圍iPhone
- 21. 如何使用Mysql時間戳創建日期範圍查詢?
- 22. 由日期時間戳問題上的範圍mysql分區
- 23. MySql選擇時間戳記作爲日期時間
- 24. 選擇日期範圍
- 25. 選擇日期範圍
- 26. 日期範圍選擇
- 27. 日期選擇器日期範圍
- 28. 從時間戳SQL選擇日期
- 29. MYSQL - 在時間範圍內選擇
- 30. PHP:選擇重疊的日期時間範圍與時間範圍重疊的日期
對不起,上面沒有提到,它是一個unix時間戳,不是mysql時間戳。 – DRKM 2010-10-20 10:31:15
我看到這篇文章,我的時間戳工作正常,我現在面臨的問題,如果調用它與一個連接它總是帶回零行返回...我的查詢是這樣的SELECT * FROM db.t1,db.t2 WHERE t2 .t1_id = t1.id AND timestamp> ='2014-06-21'AND timestamp <='2014-07-20'; – 2014-10-10 08:00:46