2016-12-09 18 views
0

私は質問があり、私はstackoverflowで解決策を見つけることができませんでした。だから私の質問です:varchar型のdatetimeで注文

PHPファイルのdatetime(dd/mm/yy hh:mm:ss)優先順位でVarcharを注文するにはどうすればよいですか? "registerdate"列を持つSQLテーブルがあります。その型はVarcharです(datetimeは他のテーブルの問題のために不可能です)。クエリBYマイSQLのORDERは次のとおりです。

SELECT * FROM users ORDER BY registerdate DESC LIMIT 3 

これは、その結果:

私はそれをしたいどのように
12-11-16 11:03:54 
06-12-16 19:05:22 
06-12-16 15:03:30 

06-12-16 19:05:22 
06-12-16 15:03:30 
12-11-16 11:03:54 

私のPHPファイルでは、私は$日時=日付と時刻を登録します(「d/m/yH:i:s」)。私のテーブルでは、それはVarcharのように見えます03/12/16 12:19:33

私はそれを私のSQLクエリで変換する必要があると思いますが、私はどのようにわかりません。誰が私を助けられるか?事前に多くの感謝!

-----サーバー/ SQLのINFO -----

Server: Localhost via UNIX socket 
Servertype: MariaDB 
Serverversie: 10.0.27-MariaDB-cll-lve - MariaDB Server 
Protocolversie: 10 
+0

ORDER BY STR_TO_DATE(登録日、'%d /%m /%Y%h:%i:%s ') – Kamal

+0

ありがとうKamal。 解決方法:ORDER BY STR_TO_DATE(登録日、 '%d /%m /%y%H:%i:%s') 大文字のHではなく大文字のHと、大文字のYではなく小文字のyです。 – Maarten

+0

パフォーマンスが良くないことを覚えておいてください。 datetime値は 'DATETIME'(または' TIMESTAMP')データ型に格納してください。このコメントは、今まで提案されたすべてのソリューションに適用されます。 –

答えて

0
SELECT * FROM users u ORDER BY STR_TO_DATE(u.registerdate, '%d/%m/%Y %H:%i:%s') DESC LIMIT 3 

または

SELECT *, STR_TO_DATE(u.registerdate, '%d/%m/%Y %H:%i:%s') as newdate FROM users u ORDER BY newdate DESC LIMIT 3 
+0

ご協力ありがとうございますが、どちらも動作しません。私は私のPHPファイルで '$ datetime = date(" d/m/y H:i:s ");と時刻を登録することを忘れていました、そして私のテーブルでは' 03/12/16 12:19:33 'に記載されている。 – Maarten

+0

申し訳ありませんが早すぎます。それは動作しません。日付は順調ですが、時間はありません。 – Maarten

+0

どのようなエラーがありますか?またはそれは動作しますが、結果は正しい順序ではありませんか? – saltydogd

0

私はあなたのSQL Serverを使用している場合、これはあまりにもあなたのために働くだろうと思います。

SELECT *構文は次のようになり、Oracleデータベースにはキャスト(registerdate日時AS)DESC

+0

ありがとうございますが、動作しません.. 私のPHPファイルでは '$ datetime = date(" d/m/y H:i:s ");で時刻を登録しています。私のテーブルでは' 03のように見えるVarcharです/ 12/16 12:19:33' – Maarten

0

BYユーザーORDER FROM:

ユーザーORDER FROM TO_DATE(registerdate、「DD/MM/YY BY

SELECT * HH24:MI:SS ')DESC