SQL関数とは、データベースの問い合わせ言語であるSQLから利用できる関数です。この記事では、OracleデータベースにおけるSQL関数の使い方を紹介しています。
引数に渡された文字をASCIIコードに変換して、戻り値として返す。
| DBMS | ASCII |
|---|---|
| MySQL | ✓ |
| Oracle | ✓ |
| PostgreSQL | ✓ |
| SQL Server | ✓ |
ASCII(char)
SELECT character, ASCII(character) FROM example
| character | ASCII(character) |
|---|---|
| A | 65 |
| B | 66 |
| C | 67 |
引数に渡されたASCIIコードを文字に変換して、戻り値として返す。
| DBMS | CHR | CHAR |
|---|---|---|
| MySQL | ✗ | ✓ |
| Oracle | ✓ | ✗ |
| PostgreSQL | ✓ | ✗ |
| SQL Server | ✗ | ✓ |
CHR(number)
引数に渡された文字列を結合して、戻り値として返す。
| DBMS | CONCAT |
|---|---|
| MySQL | ✓ |
| Oracle | ✓ |
| PostgreSQL | ✗ |
| SQL Server | ✗ |
CONCAT(string1, string2)
| DBMS | DECODE |
|---|---|
| MySQL | ✗ |
| Oracle | ✓ |
| PostgreSQL | ✗ |
| SQL Server | ✗ |
MySQL にも DECODE という名前の関数があるが、これは暗号を複合化するための関数である、Oracle の DECODE 関数とは用途が違う。
DECODE(expr, condition1, value1, condition2, value2...)
DECODE(expr, condition1, value1, condition2, value2..., default)
引数に渡された文字列の先頭文字を大文字に変換して、戻り値として返す。
| DBMS | INITCAP |
|---|---|
| MySQL | ✗ |
| Oracle | ✓ |
| PostgreSQL | ✓ |
| SQL Server | ✗ |
INITCAP(string)
文字列から部分文字列を検索し、現れた位置を示す数値を戻す。
| DBMS | INSTR |
|---|---|
| MySQL | ✓ |
| Oracle | ✓ |
| PostgreSQL | ✗ |
| SQL Server | ✗ |
INSTR(string, substring)
INSTR(string, substring, position)
INSTR(string, substring, position, occurrence)
string中のpositionの位置から検索して、substringがoccurrence番目に現れた位置を示す数値。指定条件で現れなかった場合は0を戻す。
文字列内に含まれる部分文字列を検索して、その先頭位置をバイト値で返す。
| DBMS | INSTRB |
|---|---|
| MySQL | ✗ |
| Oracle | ✓ |
| PostgreSQL | ✗ |
| SQL Server | ✗ |
INSTRB(string, substring, position, occurrence)
検索対象文字列内に部分文字列が含まれない場合は、戻り値として 0 を返す。
引数に渡された文字列に含まれる大文字を小文字に変換した文字列を戻す。DBMS によっては、半角文字だけでなく、全角文字も小文字に変換する。
| DBMS | LOWER | LCASE |
|---|---|---|
| MySQL | ✓ | ✓ |
| Oracle | ✓ | ✗ |
| PostgreSQL | ✓ | ✗ |
| SQL Server | ✓ | ✗ |
LOWER(string)
SELECT ename, LOWER(ename) FROM emp
| ename | LOWER(ename) |
|---|---|
| Tsukamoto Hiroyuki | tsukamoto hiroyuki |
文字列の左側(先頭)にある空白を削除する。
| DBMS | LTRIM |
|---|---|
| MySQL | ✓ |
| Oracle | ✓ |
| PostgreSQL | ✓ |
| SQL Server | ✓ |
LTRIM(string)
MODは剰余(割り算の余り)を返す関数である。
| DBMS | MOD |
|---|---|
| MySQL | ✓ |
| Oracle | ✓ |
| PostgreSQL | ✓ |
| SQL Server | ✗ |
MOD(n1, n2)
n1をn2で割った余りを戻り値として返す。
MOD関数を使用したSQL文の例を示す。
SQL> SELECT MOD(12, 5) FROM DUAL;
MOD(12,5)
----------
2
SQL> SELECT MOD(12, 6) FROM DUAL;
MOD(12,6)
----------
0
SQL>
文字列の右側(末尾)にある空白を削除する。
| DBMS | RTRIM |
|---|---|
| MySQL | ✓ |
| Oracle | ✓ |
| PostgreSQL | ✓ |
| SQL Server | ✓ |
RTRIM(string)
SUBSTRは、文字列の一部を切り出すSQL関数である。
| DBMS | SUBSTR |
|---|---|
| MySQL | ✗ |
| Oracle | ✓ |
| PostgreSQL | ✓ |
| SQL Server | ✗ |
SUBSTR(文字列, 開始位置)
SUBSTR(文字列, 開始位置, 文字数)
開始位置を後ろから(右から)指定するには、負の数を指定する。
SUBSTR関数の使用例を示す。
SELECT name, SUBSTR(name, 2), SUBSTR(name, -2) FROM students;
| name | SUBSTR(name, 2) | SUBSTR(name, -2) |
|---|---|---|
| SATO NEO | ATO NEO | EO |
| 佐藤愛桜 | 藤愛桜 | 愛桜 |
SELECT name, SUBSTR(name, 1, 2) FROM students;
| name | SUBSTR(name, 1, 2) |
|---|---|
| SATO NEO | SA |
| 佐藤愛桜 | 佐藤 |
文字列charの中から、start番目から始まる長さlengthの文字列を抜き出して戻す。SUBSTRとは異なり、文字数ではなくバイト数で指定する。
| DBMS | SUBSTRB |
|---|---|
| MySQL | ✗ |
| Oracle | ✓ |
| PostgreSQL | ✗ |
| SQL Server | ✗ |
SUBSTRB(char, start)
SUBSTRB(char, start, length)
文字列から指定した文字列を削除する。
| DBMS | TRIM |
|---|---|
| MySQL | ✓ |
| Oracle | ✓ |
| PostgreSQL | ✓ |
| SQL Server | ✗ |
文字列から半角スペースを削除する
TRIM(string)
指定した文字列を削除する。
TRIM(delete, FROM string)
文字列stringに含まれる文字をすべて大文字に変換した文字列を戻す。
| DBMS | UPPER | UCASE |
|---|---|---|
| MySQL | ✓ | ✓ |
| Oracle | ✓ | ✗ |
| PostgreSQL | ✓ | ✗ |
| SQL Server | ✓ | ✗ |
UPPER(string)
SELECT ename, UPPER(ename) FROM emp
| ename | UPPER(ename) |
|---|---|
| Tsukamoto Hiroyuki | TSUKAMOTO HIROYUKI |