ソートに使用できるように、列の値(VARCHARとして保持される「非MySQL」のDATE文字列)を「MySQLの日付」にキャストするにはどうすればよいですか?
_06-02-2019
_(2月6日)の形式の日付がありますが、MySQL自体は、デフォルトのDATE()関数を使用するだけではこれを認識しません。
私が現在持っているのは:SELECT * FROM Services ORDER BY Date(nextdate) DESC;
STR_TO_DATE()
関数を探しています。 MySQLはデフォルトで ISO形式 の日付を想定しています。
あなたの特定のケースではそれは次のようなものになります:
SELECT * FROM Services ORDER BY STR_TO_DATE(nextdate, %d-%m-%Y) DESC;
%d-%m-%Y
または%m-%d-%Y
、使用している「間違った」形式は何でも。
ISO日付(文字列、またはできればタイムスタンプ)とインデックスを使用すると、クエリが高速化するという効果があります。
日付が06-02-2019の形式である
データベースの未作成のルール-日付にはno formatがあります。
とにかく、あなたや私が心配する必要のあることは何もありません。
ところで、 はいつですか "06-02-2019"? 6月2日または2月6日?
文字列と日付の順序規則は[非常に]異なります。
As we all know
31/12/2018 < 01/01/2019
but
"31/12/2018" > "01/01/2019" (because "3" > "0")
フィールドで「日付」を設定する場合、実際にはreallyDateフィールドである必要があります。それ以外のことをしようとすると、問題が発生するだけです。 「オンザフライ」であらゆる種類の変換を行おうとすると問題が生じ(「危険な」データはデータを失うか、クエリを完全に壊します)、slow、テーブルの各行ごとに変換関数を実行する必要がある(つまり、テーブルスキャン!)。