◾️はじめに
小ネタ。 友人と飲みに行った時にSQLの質問されて 試しにやってみたら、思ったより勉強になった。 そのついでに出てきた、ゼロ埋めをメモっておく
目次
【1】ゼロ埋め 方法1:TO_CHAR+FM 接頭辞 を使う 方法2:LPAD を使う 【2】サンプル 例1:TO_CHAR+'FM000' 例2:LPAD for UPDATE
【1】ゼロ埋め
方法1:TO_CHAR+FM 接頭辞を使う
* FM 接頭辞: 字詰めモード (空白およびゼロのパディングを無効)
https://www.postgresql.jp/document/7.4/html/functions-formatting.html
構文
TO_CHAR(数字, 'FM0...')
例:3桁ゼロ埋め
TO_CHAR(12, 'FM000') -- '012'(左側をゼロ埋め)
方法2:LPAD を使う
* LPAD:文字列を左側に挿入する
構文
LPAD( 文字列, 調整後の文字数 [, 挿入する文字列 ] )
例:3桁ゼロ埋め
LPAD(memo, 3, '0')
【2】サンプル
* 以下のサイトで実行
例1:TO_CHAR+'FM000'
CREATE TABLE country1 ( name VARCHAR(50), memo VARCHAR(50), code integer ); INSERT INTO country1 (name,memo,code) VALUES ('Japan', '1', 1), ('Korea', '2', 2), ('China', 'A1', NULL), ('USA', '146', NULL), ('Italy', 'AAA', NULL), ('Australia', '125', 125) ; SELECT name,memo,TO_CHAR(code, 'FM000') FROM country1;
name | memo | to_char |
---|---|---|
Japan | 1 | 001 |
Korea | 2 | 002 |
China | A1 | |
USA | 146 | |
Italy | AAA | |
Australia | 125 | 125 |
例2:LPAD for UPDATE
CREATE TABLE country ( name VARCHAR(50), memo VARCHAR(50), country_code VARCHAR(3) ); INSERT INTO country (name,memo,country_code) VALUES ('Japan', '1', NULL), ('Korea', '2', NULL), ('China', 'A1', NULL), ('USA', '146', NULL), ('Italy', 'AAA', NULL), ('Australia', '125', NULL) ; UPDATE country SET country_code = LPAD(memo, 3, '0') WHERE memo ~ '^[0-9]+$' AND CAST(memo AS INTEGER) BETWEEN 0 AND 125; -- 確認 SELECT * FROM country;
関連記事
SQLでマスキングを実装
https://dk521123.hatenablog.com/entry/2022/10/02/000000
Snowflake ~ 文字列操作関連 ~
https://dk521123.hatenablog.com/entry/2022/10/01/000000