1

私は、FNN 列 (Full National Number) があるデータベースを使用しています。オーストラリアでは、すべての FNN は 10 桁で、0 で始まり、その後に 1 桁の州番号、8 桁の電話番号が続きます。

現在、エントリの半分は 9 桁のみです。つまり、最初の 0 は除外されていますが、残りの半分は 10 桁です。

最初に 0 を持たないすべての列値に 0 を連結したいと考えています。これは私が試みた現在のクエリですが、結果は 0 になります。

UPDATE SUBSCRIBERS SET FNN=concat('0',FNN) WHERE FNN LIKE '[1-9]%';

州の数字は 0 で始まらないため、最初の数字が 1 ~ 9 の場合に 0 を連結するだけで済みます。上記のクエリが機能しないのはなぜですか?

ありがとう。

よろしく、

マット

4

4 に答える 4

2

おそらく使用できますnot like

UPDATE SUBSCRIBERS SET FNN=concat('0',FNN) WHERE FNN NOT LIKE '0%';
于 2013-07-10T03:19:22.867 に答える
1

それは正しくありません。

まず、MySQL は LIKE '[1-9]' 文字クラス規則をサポートしていません。それはSQL Serverのことです。

これを行う最も簡単な方法はかなり醜いですが、1 回限りの取引のように思えます。

UPDATE Subscribers SET fnn = concat('0', fnn) WHERE fnn LIKE '1%'
UPDATE Subscribers SET fnn = concat('0', fnn) WHERE fnn LIKE '2%'
UPDATE Subscribers SET fnn = concat('0', fnn) WHERE fnn LIKE '3%'
UPDATE Subscribers SET fnn = concat('0', fnn) WHERE fnn LIKE '4%'
    <etc>
于 2013-07-10T03:12:57.733 に答える
1

あなたの質問では、それらの一部は 9 桁で、残りの半分は 10 桁であると述べました。したがって、FNN が 1 ~ 9 で始まる行を探す代わりに、なぜ FNN = 9 桁の行を探しないのでしょうか?

UPDATE SUBSCRIBERS
SET FNN=concat('0',FNN)
WHERE CHAR_LENGTH(FNN) = 9;
于 2013-07-10T03:19:45.043 に答える
0

ここには多くの実用的な答えがあるようですが、次のようにしてWHERE句を完全に削除できます。

UPDATE SUBSCRIBERS
SET FNN = RIGHT(concat('0',FNN),10)
于 2013-07-10T04:05:25.297 に答える