人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MYSQLについてお教えください。MYSQLのテーブルは下のようになります。

テーブル:TABLE_A、フィールド:ID,NAME

IDフィールドには数値が入力されています。例えば8桁や13桁などです。
やりたいことはupdateです。だたし、そのやり方がわかりません。

条件は、
IDの数値の長さが7以下の場合、頭に0を足して8桁にする。例えば「12345」の場合は、「00012345」にする。
IDの数値の長さが9以上、12以下は頭に0を足して13桁にする。例えば「123456789」の場合は、「0000123456789」にする。
8桁、13桁のものは何もしない。

上記のことが解決できるSQL文をお教えください。よろしくお願いします。

●質問者: popattack
●カテゴリ:コンピュータ
✍キーワード:MySQL name SQL フィールド 入力
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● あすか
●20ポイント

IDは文字列型という前提ですが、以下のようになります。

UPDATE TABLE_A SET ID=RIGHT(CONCAT('0000000',ID),8) WHERE CHAR_LENGTH(ID)<=7;
UPDATE TABLE_A SET ID=RIGHT(CONCAT('000000000000',ID),13) WHERE CHAR_LENGTH(ID)>=9 AND CHAR_LENGTH(ID)<=12;
◎質問者からの返答

ご回答ありがとうございます!試してみます!


2 ● きゃづみぃ
●40ポイント

未確認ですが こんな感じにすればいいかと思います。


UPDATE TABLE_A set

ID =

( case

when length(ID) <= 8 then lpad(ID, 8, '0');

when length(ID) <= 13 then lpad(ID, 13, '0');

end )

◎質問者からの返答

ご回答ありがとうございます!試してみます!1点教えてください。length(ID) <= 13 then lpad(ID, 13, '0');について。

これは8桁ジャストのものも13桁にしてしまわないでしょうか?8桁ジャストのものは13桁にはしたくありません。


3 ● chuken_kenkou
●40ポイント ベストアンサー

こんな感じでどうでしょう。

update table_A
 set id=case when char_length(id)<=7 then lpad(id,8,'0')
 when char_length(id)>=9 
 and char_length(id)<=12 then lpad(id,13,'0')
 else id
 end
;

ちなみに、以下のデータでテストしてみました。

drop table if exists table_a;
create table table_a
(id varchar(20)
,name varchar(20)
);

insert into table_a values
 ('1',null)
,('12',null)
,('123',null)
,('1234',null)
,('12345',null)
,('123456',null)
,('1234567',null)
,('12345678',null)
,('123456789',null)
,('123456789A',null)
,('123456789AB',null)
,('123456789ABC',null)
,('123456789ABCD',null)
,('123456789ABCDE',null)
;
◎質問者からの返答

ご回答ありがとうございます!!試してみます!!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ