2017-10-04 6 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ああ、そうです。投稿を編集させてください。 –

答えて

-1

varcharフィールドで日付機能を使用することはできません。 created_atdateに変換する必要があります。

これは、あなたの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にデータ型を変更してくれました。 –

関連する問題