0

重複
の可能性:MySQL-数字または特殊文字で始まる場合
数字で始まる値を選択します

列が数字で始まっているかどうかを確認するORDERBYステートメントを作成しようとしています。数字で始まっている場合は、列に+0を追加する必要があります。そうでない場合は、そうではありません。

このようなものIF(title begins with number, title + 0, title)

これについてどうやって行くのかわからない。

4

4 に答える 4

3
ORDER BY IF(title REGEXP '^[0-9]',title+0,title)

しかし、その式は数値を返します。「タイトル+0」は本質的に「タイトル」と等しいので(数値比較の観点から)、それがあなたが望むことをするつもりはないと思います。

(「+0」操作は、文字列値の先頭の数値部分にゼロを追加し、数値を返します。したがって、式全体が数値として評価されます。つまり、そのままの「タイトル」も数値。先頭の数値がない場合は 0 として返されます。

したがって、これは本質的に次と同等です。

ORDER BY title+0

タイトルの値を実際にどのような順序で返しますか? 行を先頭の数値、次にタイトル文字列の順に返しますか?

title先頭の数字がない場合の文字列値で注文したいと考えています。それ以外の場合は、先頭の数字の数値、次にタイトルの文字列値によって、次のような方法で目的に近づけることができます。

ORDER BY title REGEXP '^[0-9]', title+0, title
于 2013-01-21T20:59:45.173 に答える
2

タイトルを強制的に整数として解釈し、それが >= 1 であることをテストできます。

ORDER BY IF(title+0 >= 1, title+0, title)

しかし、1 つの列を 2 つの異なる目的に使用しているように聞こえるとコメントしなければなりません。これは、リレーショナル データベースの設計ではダメです。

また、ORDER BY はインデックスの恩恵を受けられないため、非常に遅くなります。

于 2013-01-21T20:59:30.130 に答える
0
if title LIKE 'number%' then
    CONCAT(title, '0');
end if;
于 2013-01-21T20:58:19.403 に答える
0
if (left(title,1) regexp '[0-9]', title+0, title)

また

if (title regexp '^[0-9]', title+0, title)
于 2013-01-21T20:59:50.027 に答える