2017-09-26 5 views
0

日付フォーマットによるレコードのフィルタ方法について少し混乱します。DD-MM-YYYY日付形式を使用したMySQLフィルタレコードセット

私は、日付表の日付(yyyy-mm-dd)データ型の日付型を持っています。

例:

date 
----- 
2017-01-29 
2017-01-30 

私は形式(DD-MM-YYYY)を変更したいんです。このコードを使用しています

SELECT 
    DATE_FORMAT(`date`, '%d-%m-%Y') as date 
FROM 
    dim_date; 

date 
----- 
29-01-2017 
30-01-2017 

(dd-mm-yyyy)形式でレコードをフィルタリングします。だから私はこのコードを試しました。

SELECT 
    DATE_FORMAT(`date`, '%d-%m-%Y') date 
FROM 
    dim_date 
WHERE DATE_FORMAT(`date`, '%d-%m-%Y') BETWEEN '20-04-2015' AND '06-09-2017'; 

結果 何も

しかし、私は元の形式(YYYY-MM-DD)でフィルタリングしようとした場合それは動作します。

SELECT DATE_FORMAT(`date`, '%d-%m-%Y') date 
FROM dim_date 
WHERE DATE_FORMAT(`date`, '%Y-%m-%d') BETWEEN '2015-04-20' AND '2017-01-07'; 

なぜこのようなMysqlの動作が異常ですか?私はここに何かを逃していますか

私もこの形式DATE_FORMAT(日付, '%d-%c-%Y')DATE_FORMAT(日付, '%d-%l-%Y') & DATE_FORMAT(, '%e-%l-%Y') ない幸せな顔をしてみました、私は知らせてください。クエリと

おかげ

マックス

+0

..です。 。より良く説明してください。 – scaisEdge

+0

'Date_format'はあなたに文字列を与えます。値を文字列として比較すると、 '> = 2'と' <= 0'(2と0の間には何を探しているか)の文字はありません。なぜそれをそのように使いたいのですか?あなたは入力を有効な日付に変換し、有効な日付を比較することができます。また、インデックスを使用することもできます。そして、うまくいきたいと思うようにフィルタリングします。 – Solarflare

+0

@scaisEdgeクエリを更新しました。今すぐご確認ください。申し訳ありませんが、私は現在の日付形式と混同しています。 – MAX

答えて

0

あなたは、文字列に日付を変換して、あなたが間違った順序で間を使用して値を比較している(「20」>「06」)ので動作しません。 最小値と最大値の間に必要なものが最初に必要です。日付を使用している場合

そんなに仕事間のどこcorrecly文字列日付
を変換し、文字列の動作を回避sould私は2羽のクエリの間の差が表示されていないフィルタ

SELECT date 
FROM dim_date 
WHERE date BETWEEN str_to_dat('20-04-2015', '%d-%m-%Y') 
      AND str_to_date('06-09-2017', '%d-%,-%Y'); 
+0

あなたのコメントをより良く説明してください。 – scaisEdge

+0

あなたのアップデートバージョンの仕事..文字列はルール間で一貫しているので問題はありません。私はより良い比較のために日付の使用を提案しました。文字列内の日付は、日付の文字列を右に変換します(または、日付のデフォルトの文字列形式を使用します) – scaisEdge

関連する問題