0
私はyear varchar(100)
という名前のテーブルを持っています。この列はMySqlは数字のみを選択し、それらをvarcharカラムから注文します
Year
-------
1901
0
circa 12580
125d4 great
year 1012
3411 standard
12
saf
1234
などのデータは、今私はYear
フィールドに最初の4桁の数字を見つけることによってYear
昇順または降順で注文したい含めることができます。私がしたい:
- はカラムだけものが4桁以上(単独で、または いくつかの文字列を含むいずれか)
- は最初の4桁の数字を抽出する(4つ以上またはいくつかの整数である場合)または4桁の数字を取得していなさい二つの条件
上記に基づき、結果セットによって
Year
1012
1234
1258
1901
3411
降順で逆も同様です。私は、次の試してみました
:
SELECT *
FROM table
WHERE YEAR REGEXP '^[0-9]+$' AND LENGTH(YEAR) = 4
ORDER BY CAST(YEAR AS UNSIGNED) DESC;
しかし、これはそれらによってのみ4桁の数字と注文を持つ列を返しますが、ではない、私は上記のように結果。
ベストプラクティスは、int型を使用して新しい列を作成することです年を取って、それを並べ替えます。抽出された正規表現でソートするクエリを構築することは成功しますが、インデックスを使用しません(多くの行がある場合は重要です)。プロダクションアプリではないクエリの場合は、テンポラリテーブルを作成し、古いテーブルのすべての行と正規化された年の値を入力してから、通常のソートを行います。 –
@DanIonescu私は現在生産中ですが、今すぐカラムを作成することはできません –
okですので、クエリはアプリケーションのためですか、それとも一度データを分析するのは一度だけですか? –