2025年10月17日金曜日

SQL Serverの文字列関数まとめ|LEN・SUBSTRING・REPLACEの使い方

目次

SQL Serverでは、文字列操作を効率化するために多くの文字列関数が用意されています。

本記事では、初心者から中級者までよく使う関数を厳選し、実務でそのまま使えるサンプル付きで解説します。

特に2017以降で追加された便利関数にも注目しながら、他RDBとの違いや注意点も押さえます。

SQL Serverの文字列関数の基本|文字列操作を効率化する方法

LEN関数(文字数を取得)

LENは文字列の長さを返します。末尾の空白はカウントされない点に注意。

SELECT LEN('Hello World'); -- 結果: 11

LEFT / RIGHT関数(文字列の一部を取得)

LEFTは左側から、RIGHTは右側から指定文字数を取得します。

SELECT LEFT('ABCDEFG', 3);  -- 'ABC'
SELECT RIGHT('ABCDEFG', 2); -- 'FG'

SUBSTRING関数(任意位置から切り出す)

任意の開始位置から指定長の文字列を戻します。

SELECT SUBSTRING('SQL Server', 5, 6); -- 'Server'

REPLACE関数(文字列を置換する)

指定した文字列を別の文字列に置換します。

SELECT REPLACE('Hello World', 'World', 'SQL'); -- 'Hello SQL'

その他の文字列関数(TRIM, CONCAT_WS, STRING_AGG など)

2017以降で追加された便利関数は以下です(古いバージョンでは使えません)。

  • TRIM():前後の空白を削除。2016以前は LTRIM(RTRIM(...)) が必要。
  • CONCAT_WS():区切り文字付きで結合。
  • STRING_AGG():複数行の文字列を区切って集約。
  • TRANSLATE():複数文字の一括置換(REPLACEの多段を置き換え)。
SELECT TRIM('   test   ');                 -- 'test'
SELECT CONCAT_WS('-', '2025', '10', '01'); -- '2025-10-01'
SELECT STRING_AGG(Name, ',') FROM Users;   -- 'Alice,Bob,Charlie'
SELECT TRANSLATE('abc', 'abc', '123');     -- '123'

文字列関数の注意点と実務活用

WHERE句で関数を使うとインデックスが効きにくくなります(述語の左辺に列を保つのがコツ)。

-- 悪い例(インデックスが効かない)
WHERE SUBSTRING(Name,1,1) = 'A';

-- 良い例(インデックスが効く)
WHERE Name LIKE 'A%';

また、照合順序(Collation)により大文字小文字の扱いが変わるため、想定どおりの比較にならない場合は照合順序や関数の選択を見直してください。

他RDBとの比較(MySQL・PostgreSQL・Oracle)

  • 正規表現関数:PostgreSQL/Oracleは REGEXP_REPLACE 等を標準サポート。SQL Serverは原則非対応(CLRやアプリ側対応が現実的)。
  • TRIM:他RDBは古くからサポート。SQL Serverは2017で追加。
  • 文字列結合:SQL Serverは +、PostgreSQLは || も可。NULLの扱いに差異。
  • 検索関数:SQL Serverは CHARINDEX/PATINDEX、Oracleは INSTR、PostgreSQLは POSITION/STRPOS
  • 大文字小文字:SQL Serverは照合順序依存、他RDBは関数指定で柔軟に制御可能。

補足:FORMAT関数とバージョン差

FORMAT2012で追加。日付や数値の表記を柔軟に出力できますが、パフォーマンス低下に注意。

SELECT FORMAT(GETDATE(), 'yyyy/MM/dd'); -- '2025/10/01'

まとめ

SQL Serverの文字列関数は実務での出番が多く、基本(LEN/LEFT/RIGHT/SUBSTRING/REPLACE)に加えて、2017以降のTRIM/CONCAT_WS/STRING_AGG/TRANSLATEが使えると効率が上がります。

正規表現が標準で使えないなどの制約はあるものの、設計と書き方を工夫すれば十分に対応可能です。

SQL Server 解説用イメージ

0 件のコメント:

コメントを投稿