2017-04-25 31 views
2

我有一個數據,所有列類型爲text甚至日期也存儲在文本類型列中。現在,當我使用select查詢來訪問列的工作發現,但是當我試圖對該列執行任何日期操作時,它總是返回null。MYSQL:選擇查詢返回空的DATE函數

表:

enter image description here

如果正在運行的查詢select column_14 from mytable where id = 2其工作正常,但當我試圖找到今天的日期和column_14的區別其總是返回null

查詢運行:

select DATEDIFF(NOW(),STR_TO_DATE(column_14,"%y-%m-%d")) from `mytable` where id = 2 

enter image description here

任何人都可以告訴我什麼是我的查詢錯誤?

結構視圖

enter image description here

+0

使用此,DATEDIFF(NOW(),DATE(column_14)) –

+0

相同的結果..... –

+0

您的日期列有ymd格式,因此請嘗試一次,如DATEDIFF(NOW(),column_14)不帶DATE()。 –

回答

2

應該%Y而不是%y.%Y需要4位數的年份。

DATEDIFF(NOW(),STR_TO_DATE(column_14,"%Y-%m-%d")

+0

我同意你,但它總是返回空 –

+0

即使我使用簡單的日期()'它返回'null' –

+0

它只是一個標題 –

1

,如果你選擇了錯誤的格式或功能檢測到某個範圍的月或日數的STR_TO_DATE將返回空值。在你的例子中,你選擇了一個錯誤的格式%y應該是%Y。以下是可能發生的一些示例。 (注:STR_TO_DATE差這一點,並不會檢查多少天了一個月的有效期)

MariaDB [sandbox]> create table t (dt text); 
Query OK, 0 rows affected (0.28 sec) 

MariaDB [sandbox]> insert into t values ('2017-13-01'),('2017-04-31'),('2017-04-33'),('2017-04-03'),('birth_date'); 
Query OK, 5 rows affected (0.02 sec) 
Records: 5 Duplicates: 0 Warnings: 0 

MariaDB [sandbox]> 
MariaDB [sandbox]> select str_to_date(dt,'%y-%m-%d') Invalid_year_format, 
    -> str_to_date(dt,'%Y-%m-%d') Valid_year_format_MM_and_DD, 
    -> datediff(now(),str_to_date(dt,'%Y-%m-%d')) datediff_examples 
    -> from t; 
+---------------------+-----------------------------+-------------------+ 
| Invalid_year_format | Valid_year_format_MM_and_DD | datediff_examples | 
+---------------------+-----------------------------+-------------------+ 
| NULL    | NULL      |    NULL | 
| NULL    | 2017-04-31     |    -6 | 
| NULL    | NULL      |    NULL | 
| NULL    | 2017-04-03     |    22 | 
| NULL    | NULL      |    NULL | 
+---------------------+-----------------------------+-------------------+ 
5 rows in set, 11 warnings (0.00 sec) 
+0

獲得仍然相同的輸出...即使在正確的'%Y-%m-% d'此 –

+0

如果表是myisam或innodb,則沒有區別。正如我所說的問題是數據不起作用。 –

+0

我得到了問題..我的數據有錯誤。我只是出口一個單一的行,它的'\ 0'與日期和'REPLACE'之後,我可以執行日期操作..謝謝 –