web-dev-qa-db-ja.com

(a)VARCHARとして記録された日付値を(b)(c)ORDER BY句で使用するための特定のDATE形式にキャストする方法

ソートに使用できるように、列の値(VARCHARとして保持される「非MySQL」のDATE文字列)を「MySQLの日付」にキャストするにはどうすればよいですか?

_06-02-2019_(2月6日)の形式の日付がありますが、MySQL自体は、デフォルトのDATE()関数を使用するだけではこれを認識しません。

私が現在持っているのは:SELECT * FROM Services ORDER BY Date(nextdate) DESC;

1
Luc H

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日付(文字列、またはできればタイムスタンプ)とインデックスを使用すると、クエリが高速化するという効果があります。

2
jynus

日付が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、テーブルの各行ごとに変換関数を実行する必要がある(つまり、テーブルスキャン!)。

3
Phill W.