0

4 つの整数を含む属性を含む何千もの行がありzipcodeます。5 つの整数を含む行もあれば、2 つまたは 3 つの整数を含む行もあります。

私がやりたいことは、4 つの整数のみを含む行の前に 0 を追加することです。テーブル名zipcodeと属性も。

行を更新して表示したくない!

このコードを試してみましたが、運がありませんでした(影響を受ける行はありません):

UPDATE zipcode
SET zipcode = CONCAT('0', zipcode)
WHERE CHAR_LENGTH(zipcode) = 4

ところで、単純な選択でCHAR_LENGTHを使用できますが、機能します:

SELECT *
FROM zipcode
WHERE CHAR_LENGTH(zipcode) = 4

だから、私の節CHAR_LENGTHではうまくいかないようです。WHERE

編集:zipcodeintです。

4

2 に答える 2

2

zipcode を int として格納しているように聞こえますが、実際には char として扱いたいと考えています。

その場合、いくつかのオプションがあります。

1) 列のデータ型を変更し、更新を実行して左パッドを 0 にします。

alter table zipcode
  modify column zipcode char(5) not null;

update zipcode
set zipcode = lpad(zipcode,5,'0')
where char_length(zipcode) < 5;

2) データ型をそのままにして、select ステートメントで左に 0 を埋め込むことで、取得時にデータをフォーマットします。

select lpad(zipcode,5,'0')
from zipcode;

デモ

于 2012-06-14T16:07:00.130 に答える
0

変数のデータ型zipcodeはINTであり、すべての郵便番号を5桁の形式で表示したいと思います。これを行うには、以下を使用します。

SELECT zipcode as Actual, 
       CASE CHAR_LENGTH(zipcode)
       WHEN 1 THEN CONCAT('0000', zipcode)
       WHEN 2 THEN CONCAT('000', zipcode)
       WHEN 3 THEN CONCAT('00', zipcode)
       WHEN 4 THEN CONCAT('0', zipcode)

       END AS "Final"
FROM zipcode

デモ

于 2012-06-14T16:22:49.013 に答える