2017-10-04 258 views
-1

我在從數據庫中獲取結果時遇到問題,DATE_FORMAT函數返回null而不是返回格式化日期。mysql date_format無法正常工作返回空

表列和它們的數據類型:

paid_amount - >浮

created_at - > VARCHAR(100)

波紋管被查詢是:

SELECT SUM(paid_amount) AS amount, 
date_format(created_at,'%Y-%m-%d') as dated 
FROM `job_card` 
WHERE date_format(created_at,'%Y-%m-%d') >= '2017-09-03' AND 
date_format(created_at,'%Y-%m-%d') <= '2017-10-03' GROUP BY date(created_at) 

我使用另一使用UNIX_TIMESTAMP函數將日期轉換爲時間戳的方法,但仍然出現相同問題:

SELECT SUM(paid_amount) AS paid_amount, 
UNIX_TIMESTAMP(created_at) AS duration 
FROM job_card 
WHERE UNIX_TIMESTAMP(created_at) >= 1504549800 AND 
UNIX_TIMESTAMP(created_at) <= 1507055400 GROUP BY date(payment_date) 
+0

爲什麼'created_at'爲varchar。它應該是日期格式。 –

+1

那麼,'created_at'中的值是什麼? –

+0

@ chris85 ohh,你說得對。讓我編輯帖子。 –

回答

-1

您不能在varchar字段中使用日期函數。您需要將created_at轉換爲date字段。

這將使您的SQL更加清潔,以及您可以直接在查詢中使用像created_at > '2017-09-03'這樣的子句。

我不知道你的日期目前是如何格式化爲字符串,但你最好的選擇是寫一些東西來讀取日期,格式化爲YYYY-MM-DD,並重新插入它們。如果所有日期都是這種格式,您應該能夠將該字段轉換爲日期類型並保持信息不變。

mysql> desc test; 
+--------+-------------+------+-----+---------+-------+ 
| Field | Type  | Null | Key | Default | Extra | 
+--------+-------------+------+-----+---------+-------+ 
| field1 | varchar(10) | YES |  | NULL |  | 
+--------+-------------+------+-----+---------+-------+ 
1 row in set (0.00 sec) 

mysql> select * from test; 
+------------+ 
| field1  | 
+------------+ 
| 2017-01-01 | 
+------------+ 
1 row in set (0.00 sec) 

mysql> alter table test modify field1 date; 
Query OK, 1 row affected (0.24 sec) 
Records: 1 Duplicates: 0 Warnings: 0 

mysql> desc test; 
+--------+------+------+-----+---------+-------+ 
| Field | Type | Null | Key | Default | Extra | 
+--------+------+------+-----+---------+-------+ 
| field1 | date | YES |  | NULL |  | 
+--------+------+------+-----+---------+-------+ 
1 row in set (0.00 sec) 

mysql> select * from test; 
+------------+ 
| field1  | 
+------------+ 
| 2017-01-01 | 
+------------+ 
1 row in set (0.00 sec) 
+0

謝謝@USD Matt將數據類型更改爲DATETIME爲我工作。 –