2016-08-29 4 views
-2

私は日付を並べ替えるとき、並べ替えではありませんでした。mysqlクエリを使用してorder in dateを使用する方法

SELECT * FROM `client` ORDER By `nextDate` ASC 

これは私がクライアントテーブルから昇順にソート日付ですべてのデータが欲しい私のクエリで、nextDateフィールドタイプはVARCHARです。私は昇順で日付を並べ替えることができますし、私は24/12/2016(d/m/Y)のような日付formateをしたい。

私はこのクエリを使用する場合、それはこの

01/08/2016 
07/10/2016 
21/08/2016 

のようなソートのみ初日ない月のでしょうが、私は、ソートこの

01/08/2016 
07/08/2016 
21/10/2016 
25/12/2016 

ようにしたいので、私はdo.inできるか私を助けてくださいアドバンスを進める、

+4

DATEまたはDATETIMEまたはTIMESTAMPデータ型を使用する必要があります。そうではなく、日付を使用してソートすることはできません。 –

+3

ORDER BY STR_TO_DATE(table_date、 '%D%M%Y')ASC; – JYoThI

+0

適切な日付データ型を使用して日付を格納します。 – Strawberry

答えて

2

これはコメントには長すぎます。

おそらく、日付はの日付として保存されていない可能性があります。代わりに、文字列として格納しています。組み込みのMySQLデータ型を使用する必要があります。 に文字列として日付を格納する必要がある場合は、常にYYYY-MM-DD形式を使用します。それは正しくソートされます。

あなたはstr_to_date()でこの問題を解決することができます

ORDER By str_to_date(`nextDate`, '%d/%m/%Y') ASC 
+1

ああ、なぜあなたはそれらのdownvotesを今得たか分かります。 %d /%m /%Y ''として編集された '%m /%d /%Y 'の元の回答を見てください。 Lordie、人はそんなに怠け者なのか無知な人なんてコメントして逃げるのですか? * facepalm *。私はあなたがそのゴードンよりも尊敬を必要と信じています。だからあなたは若干の間違いをした。 –

+0

@ Fred-ii-。 。 。私はdownvoteしないでください。そして、私はStack Overflowがコメントを追加せずにdownvoteすることを本当に難しくしたことを望みます。しかし、このサイトのほとんどの人は礼儀正しく、合理的です。信仰を失わないでください。 –

2

使用mysqlのSTR_TO_DATE

あなたは結果BY MySQLの日付値とORDERにあなたの文字列を変換するためにSTR_TO_DATEを使用することができます。

SELECT * FROM `client` ORDER BY STR_TO_DATE(`nextDate`, '%d/%m/%Y') ASC ; 

日付は日付データ型に格納する必要があります。

あなたが有効な日付(yyyy-mm-dd)にすべてのあなたの日付文字列を変換したい場合は、以下の手順に従ってください。一言で言えば

ステップ:

まずにすべての現在の日付文字列を更新有効な日付形式:

UPDATE `client` 
SET `nextDate` = STR_TO_DATE(`nextDate`, '%d/%m/%Y'); 

今にnextDate列のデータ型を変更:

ALTER TABLE client MODIFY nextDate DATE; 
+0

あなたの日付書式はこの種の日付に有効です: '29th/August/2016' – 1000111

+0

@ 1000111 – JYoThI

+0

キャッチについてありがとうございます。その列のデータ型を' date'型に変換するための提案を追加できます。あなたの答えを編集してもよろしいですか? – 1000111

0
"select * from `client` ORDER BY nextDate ASC"; 

databseエントリnextDateデータ型でTIMESTAMPを使用してください。

0

STR_TO_DATE(str,format)

これはDATE_FORMAT()関数の逆数です。それは文字列 strと書式文字列形式をとります。 STR_TO_DATE()は、書式文字列に日付と時刻の両方の部分が含まれる場合はDATETIME値 を返し、文字列に日付または時刻部分のみが含まれる場合はDATEまたは TIME値を返します。 strから抽出された の日付、時刻、または日付時刻の値が不正な場合、 STR_TO_DATE()はNULLを返し、警告を生成します。例えば、ここに

mysql> SELECT STR_TO_DATE('04/31/2004', '%m/%d/%Y'); 
      -> '2004-04-31' 

については はあなたのクエリは、次の2つの方法

1)これまでのnextDate列の変更データ型があります

SELECT * FROM `client` ORDER By STR_TO_DATE(`nextDate`,'%m/%d/%Y') ASC; 
0

です。あなたはその後、

SELECT * FROM `client` ORDER BY STR_TO_DATE(nextDate, '%Y-%M-%D') ASC 
+0

データ型を変更する前に、 'yyyy-mm-dd'形式で日付文字列を更新する必要があります。そうしないと、すべてのデータが失われ、' 0000-00-00'のような日付が表示されます。 Check @ jothiの答え。 – 1000111

0
SELECT * FROM `client` ORDER BY DATE(`nextDate`) ASC 

それを、あなたがテーブルのスキーマを変更したくない場合は

SELECT * FROM `client` ORDER By `nextDate` ASC 

2)に述べたように

ALTER TABLE `client` CHANGE `nextDate` `date` nextDate NOT NULL; 

は、その後、あなたの選択クエリを使用して、クエリの下に使用します日付を日付として保存すると、日付が昇順になります。

+0

このコードは問題の解決に役立つかもしれませんが、_why_および/または_how_が質問に答えていることは説明していません。この追加の文脈を提供することは、長期的な教育的価値を大幅に改善するだろう。どのような制限や仮定が適用されるかなど、あなたの答えを解説してください。 –

関連する問題