SAK 図書館
SQL 文字関数 - 連結、空白削除、置換、切出、検索、長さ、数値変換他
基本的に Oracle、SQL-Server、MDB で共通です。
■文字列連結
・concat() 関数は、文字列を結合するした結果を返す。
「||」演算子の方が簡単と思うがどうでしょう。
(Access では 「&」を使用する。)
select 品番, concat('part-', 品番), 'part-' || 品番 from sak.受注m
order by 品番
;
■chr 文字変換
・chr() 関数は、コードに該当する ASCII 文字を返す。
この例では、「1」と言う文字が返る。
select 品番, chr(49) from sak.受注m
order by 品番
;
■ascii コード変換
・ascii() 関数は、文字に該当する ASCII コードを返す。
この例では、「49」と言う数字が返る。
select 品番, ascii('1') from sak.受注m
order by 品番
;
■小文字化
・lower() 関数は、英字を小文字にして返す。
この例では、品番に大文字があると全て小文字で返る。
select lower(品番), 受注数 from sak.受注m
order by 品番
;
■大文字化
・upper() 関数は、英字を大文字にして返す。
この例では、品番に小文字があると全て大文字で返る。
select upper(品番), 受注数 from sak.受注m
order by 品番
;
■左文字埋め
・lpad() 関数は、文字列の左に指定文字を埋めて指定数切り出します。
(切り出し指定数になるまで繰り返し埋めます。)
select lpad('abc', 5, '0') from dual;
LPAD(
-----
00abc
select lpad('abc', 5, '012') from dual;
LPAD(
-----
01abc
・指定文字省略値は ' ' 半角スペースです。
select lpad('abc', 5) from dual;
LPAD(
-----
abc
select lpad('abc', 5, ' ') from dual;
LPAD(
-----
abc
・次の例では、品番の左に「0」を埋めた、右から 8 文字固定の文字列となり
ます。
select lpad(品番, 8, '0'), 受注数 from sak.受注m
order by 品番
;
LPAD(品番,8,'0') 受注数
---------------- ----------
0000a001 500
0000b001 2000
■右文字埋め
・rpad() 関数は、文字列の右に指定文字を埋めて指定数切り出します。
(切り出し指定数になるまで繰り返し埋めます。)
select rpad('abc', 5, '0') from dual;
RPAD(
-----
abc00
select rpad('abc', 5, '012') from dual;
RPAD(
-----
abc01
・指定文字省略値は ' ' 半角スペースです。
select rpad('abc', 5) from dual;
RPAD(
-----
abc
select rpad('abc', 5, ' ') from dual;
RPAD(
-----
abc
・次の例では、品番の右に「_」を埋めた、左から 8 文字固定の文字列となり
ます。
select rpad(品番, 8, '_'), 受注数 from sak.受注m
order by 品番
;
RPAD(品番,8,'_') 受注数
---------------- ----------
a001____ 500
b001____ 2000
■左空白削除
・ltrim() 関数は、文字列の左側の空白を除去します。
この例では、品番の左側に空白があれば、除去されます。
select ltrim(品番), 受注数 from sak.受注m
order by 品番
;
■右空白削除
・rtrim() 関数は、文字列の右側の空白を除去します。
この例では、品番の右側に空白があれば、除去されます。
select rtrim(品番), 受注数 from sak.受注m
order by 品番
;
■左右空白削除
・ltrim()、rtrim() 関数を組み合わせて実現します。
この例では、品番の左右の空白が除去されます。
select ltrim(rtrim(品番)), 受注数 from sak.受注m
order by 品番
;
■文字列置き換え
・replace() 関数は、文字列の置き換えをする。
この例では、品番に「a0」と言う文字列があれば、「b1」に置き換えられる。
select replace(品番, 'a0', 'b1'), 受注数 from sak.受注m
order by 品番
;
・「a0a1a2」中の a0 を b1 に置き換える場合、次のようにします。
select replace('a0a1a2', 'a0', 'b1') from dual;
REPLAC
------
b1a1a2
■文字列置き換え
・translate() 関数は、凝った文字列の置き換えをする。
ソース文字列に対して対象文字「0123456789abc」に該当する部分を
「0123456789abc」に対になった「0000000000AAA」で置き換えます。
つまり、「0123456789abc」は、0〜9、a〜c なので、ソース文字全部に該当
します。そして、0 → 0、1 → 0、...、a → A、b→ A、... の置き換え、
0〜9 → 0、a〜c → A で「AAA000」になります。
select translate('abc012', '0123456789abc', '0000000000AAA') from dual;
|_ ソース |_ 対象文字 |_ 対象文字に対する置き換え文字
TRANSL
------
AAA000
・カットもできる。この例では、「000」が返る。
select translate('abc012', '0123456789abc', '0000000000') from dual;
TRA
---
000
■文字列切り出し
・substr() 関数は、文字列の切り出しをする。
(Access では mid を使用する。)
この例では、品番の 2 文字目から 3 文字分を切り出す。
日本語対応関数なので、バイト単位の処理をしたい場合は、substrb() を
使用する。
select substr(品番, 2, 3), 受注数 from sak.受注m
order by 品番
;
・開始位置以降、最後まで切り出す場合は、切り出す文字数を省略できる。
select substr(品番, 2), 受注数 from sak.受注m
order by 品番
;
■文字列検索
・instr() 関数は、文字列の検索を行う。
この例では、品番の 2 文字目以降から「0」を検索して、その位置から
substr() で切り出した文字列を返します。
日本語対応関数なので、バイト単位の処理をしたい場合は、instrb() を
使用する。
select substr(品番, instr(品番, '0', 2, 1)), 受注数 from sak.受注m
order by 品番
;
・開始位置が負の場合は、後ろから検索する。
この例では、品番の後ろ側から「0」を検索して、その位置から
substr() で切り出した文字列を返します。
select substr(品番, instr(品番, '0', -1, 1)), 受注数 from sak.受注m
order by 品番
;
■文字列の長さ
・length() 関数は、文字列の長さを返す。
この例では、品番の文字数を返します。
この関数を単独で使うことにあまり意味はないと思います。
substr()、instr() との組み合わせで使うことが大半です。
日本語対応関数なので、バイト単位の処理をしたい場合は、lengthb() を
使用する。
select length(品番), 受注数 from sak.受注m
order by 品番
;
・この例では、品番の後ろから 3 文字を切り出す。
select substr(品番, length(品番) - 2), 受注数 from sak.受注m
order by 品番
;
■数値から文字列へ変換 (数値フォーマット、書式変換)
・to_char() 関数は、数値を文字列型に変換します。
この例では、受注数を文字列として返します。
select 品番, to_char(受注数) from sak.受注m
order by 品番
;
・三桁毎に数値にカンマ「,」を入れたい場合、次のようにします。
select 品番, to_char(受注数, '999,999,999,999') from sak.受注m
order by 品番
;
・小数点以下をフォーマットする場合は、次のようにします。
select 品番, to_char(受注数, '999,999,999,999.99') from sak.受注m
order by 品番
;
・ゼロ埋め(0 埋め) フォーマットする場合は、次のようにします。
select 品番, to_char(受注数, '000000000') from sak.受注m
order by 品番
;
■文字列から数値へ変換
・to_number() 関数は、文字列を数値に変換します。
この例では、受注数を文字列としたものを、また数値に変換しています。
現実的な例ではありませんが機能はわかるはずです。
select 品番, to_number(to_char(受注数)) from sak.受注m
order by 品番
;
■型変換
・cast() 関数は、ANSI 規程の変換関数です。
SQL-Server の convert() 関数は、Oracle では、to_char()、to_number()、
to_date() に相当します。
select 品番, cast(受注数 as varchar2(20)) from sak.受注m
order by 品番
;
select cast('99-01-01' as date) from dual;
■SQL 基礎実地編資料
■SQL 基礎編資料
■SQL チューニング編資料
■Oracle PL/SQL 編資料
■PostgreSQL 編、JAVA Servlet、JSP 編資料
■MySQL 編資料