2017-06-19 11 views
-2

私はテーブルがあり、日付として列の名前を持ってデータ型はvarchar(50)です。このような :私は唯一の唯一の6番目の月のデータを取得2つの日付の結果の間に間違っている

select s.date 
from add_vehicle a 
left join services s 
    ON a.vid=s.vid 
where date BETWEEN '01/04/2017' AND '19/06/2017' 

dates 
------- 
16/06/2017 
25/05/2017 
03/06/2017 
17/06/2017 
03/06/2017 
12/06/2017 
05/06/2017 
06/06/2017 
15/06/2017 
13/06/2017 
29/04/2017 
21/05/2017 

は、私はこれを試してみました。

'19/06/2017 'を'30/06/2017'に変更すると、バランスの結果が得られます。

何が問題ですか?それを修正するには?

ガイドしてください。

注:

+1

日付をvarcharとして保存しないでください。常に日付形式で保管してください。その間に文字列を日付に変換する必要があります。 mysqlのドキュメントを読む方法 – Jens

+1

カラムのデータ型をDATE –

+0

に変更します。これはわかりますが、varcharを使用している場合はどうすればいいですか? –

答えて

1

があなたのデータを修正し機能していないsqlfiddle!データベースは、理由のために日付/時刻データ型をサポートします。それはあなたがそれらを使うべきだからです。あなたのケースでは、あなたが行うことができます:

UPDATE t 
SET dates = date_format(str_to_date(date, '%d-%m-%Y'), '%Y-%m-%d'); 

次に、データの種類を変更:

ALTER TABLE t MODIFY dates date; 

出来上がりを!コードが機能し始めます。

データの問題を回避するために過度に複雑なクエリを書き込まないでください。データを修正してください。

関連する問題