2013-01-21 213 views
1

的行爲,我有如下表:奇怪查詢

+-------------+------------------+------+-----+-------------------+----------------+ 
| Field  | Type    | Null | Key | Default   | Extra   | 
+-------------+------------------+------+-----+-------------------+----------------+ 
| category_id | int(11) unsigned | NO | PRI | NULL    | auto_increment | 
| title  | varchar(64)  | NO |  | NULL    |    | 
| description | text    | NO |  | NULL    |    | 
| created_on | timestamp  | NO |  | CURRENT_TIMESTAMP |    | 
| updated_on | timestamp  | YES |  | NULL    |    | 
+-------------+------------------+------+-----+-------------------+----------------+ 

我需要根據創建日期刪除一些記錄,並執行一組查詢:

mysql> select created_on from categories limit 10; 
+---------------------+ 
| created_on   | 
+---------------------+ 
| 2013-01-14 09:26:21 | 
| 2012-08-15 11:18:38 | 
| 2012-09-06 06:44:46 | 
| 2012-09-06 23:27:14 | 

然後

mysql> select date('2013-01-14 09:26:21'); 
+-----------------------------+ 
| date('2013-01-14 09:26:21') | 
+-----------------------------+ 
| 2013-01-14     | 
+-----------------------------+ 

最後我得到了:

mysql> select DATE('created_on') from categories limit 10; 
+--------------------+ 
| DATE('created_on') | 
+--------------------+ 
| NULL    | 
| NULL    | 
| NULL    | 
| NULL    | 

正如你所看到的日期未被正確轉換。在大約10分鐘內工作正常:

mysql> select date(created_on) from categories limit 10; 
+------------------+ 
| date(created_on) | 
+------------------+ 
| 2013-01-14  | 
| 2012-08-15  | 
| 2012-09-06  | 
| 2012-09-06  | 

我確信在運行查詢時數據完好無損。

所以我的問題:
任何人都可以解釋爲什麼日期函數在相同的輸入顯示不同的結果嗎?

+1

輸入是不一樣的。有一次您告訴它將文本'created_on'投射到日期字段;導致每個記錄都爲空,因爲它無法做到。另一次你告訴它實際使用時間戳字段並返回JUSt日期部分。 – xQbert

回答

3

你必須使用::

select DATE(created_on) from categories limit 10; 

通過使用倒逗號,你問的數據庫來治療'created_on'作爲參數,因爲它不能被轉換爲日期類型,你得到空

+1

謝謝你,我可以看到你自己的編輯有什麼問題:) – AlecTMH

3
select DATE('created_on') from categories limit 10; 

字符串與柱:

select DATE(created_on) from categories limit 10; 
+0

謝謝,我錯過了。 – AlecTMH