SQL Serverは、Microsoft社のリレーショナルデータベース(RDBMS)です。近年は、小中規模向けエディション「SQL Server Express Edition」や、GUI管理ツール「SQL Server Management Studio (Basic/Express)」が無償で提供されていることもあり、データベースにSQL Serverを使った開発に携わる機会も増えているのではないでしょうか。

SQL Serverにおいて効率的に開発をするためには、そのSQL言語である「Transact-SQL(T-SQL)」を理解する必要があります。そこで、本稿では、Transact-SQLにて利用できる主要な関数について解説します。効率的にSQLプログラミングできるように、Transact-SQLの関数を理解してみてはいかがでしょうか。

記事の構成

本編「文字列編」では、文字列を操作する関数について紹介します。「日付/数学編」では、日付時刻を扱う関数、数学的な関数について紹介します。「NULLと型変換編」では、NULL値を扱う関数、型の変換に関する関数、関数を組み合わせる例について紹介します。

SQLの実行例について

SQLの実行結果と解説はSQLコメント「/* → 結果(解説)*/」の形式で記述しています。追加の解説もSQLコメント「--解説」の形式で記述しています。 これらのSQL実行例はそのままコピーして簡単に実行できます。SQL Serverをインストールしている環境がある場合は、実際に実行することで理解を深めることができるでしょう。

なお、本稿では、SQL Server 2005(2008) Express Editionにて動作確認を行っています。

MSDNドキュメント

ページの都合上、全ての機能を紹介しきれない関数もあります。また、旧バージョンとの互換性のために残されている関数なども紹介していません。そのため、これらの関数の詳細を調べたい場合は、以下のリンクにあるMSDN(Microsoftの開発ドキュメント)を参照すると良いでしょう。

SQL Server 2008 関数
SQL Server 2005 関数

文字列関数

それでは、文字列の取り出し、検索、置換といった関数から紹介していきます。

取り出し、検索、置換関連の関数一覧

関数名 戻り値 説明
LEFT 文字列(入力値依存) 指定した長さの文字列を左端から返します
RIGHT 文字列(入力値依存) 指定した長さの文字列を右端から返します
SUBSTRING 文字列(入力値依存) 指定した場所から指定した長さの文字(イメージ)を取り出します
CHARINDEX 数値(入力値依存) 文字列を検索し、見つかった場合は、その開始位置を返します。見つからない場合は0を返します
PATINDEX 数値(入力値依存) ワイルドカードを使ったパターンで文字列を検索し、見つかった場合は、その開始位置を返します。見つからない場合は0を返します。
REPLACE 文字列(入力値依存) 文字列を置換します
STUFF 文字列(入力値依存) 指定した場所から指定した長さの文字を削除して、新しい文字列を挿入します

文字列の取り出し(LEFT、RIGHT、SUBSTRING)

文字列の一部を取り出すには、LEFT関数、RIGHT関数、SUBSTRING関数を使用します。LEFT関数は先頭(左側)、RIGHT関数は行末(右側)、SUBSTRING関数は任意位置の文字列を取得することができます。

LEFT関数、RIGHT関数、SUBSTRING関数の実行例


--文字の取り出し
SELECT LEFT('東京都世田谷区',3)
/* → 東京都 (左から3文字)*/

SELECT RIGHT('東京都世田谷区',4)
/* → 世田谷区 (右から4文字)*/

SELECT SUBSTRING('今日は金曜日', 4, 2)
/* → 金曜 (4文字目から2文字取得)*/

検索(CHARINDEX、PATINDEX)

文字列を検索するには、CHARINDEX関数、PATINDEX関数を使用します。それぞれ、見つかった文字列の開始位置を返します。CHARINDEX関数では固定の文字列を検索できます。 PATINDEX関数では、ワイルドカードを使ったパターン文字列で検索できます。ワイルドカードとして、%:任意の文字列、_:任意の1文字、[]:範囲、[^]:除外範囲を利用できます。

CHARINDEX関数、PATINDEX関数の実行例


--文字列の場所を検索
SELECT CHARINDEX('千葉','千葉県千葉市')
/* → 1 (千葉を検索)*/

SELECT CHARINDEX('東京','千葉県千葉市')
/* → 0 (東京を検索)*/

SELECT CHARINDEX('千葉','千葉県千葉市',2)
/* → 4 (2文字目以降で千葉を検索)*/


--ワイルドカードを使って検索
SELECT PATINDEX('%[都道府県]%' , '東京都中央区')
/* → 3 (都を検索)*/

SELECT PATINDEX('%[都道府県]%' , '神奈川県横浜市')
/* → 4 (県を検索)*/

置換(REPLACE、STUFF)

文字列を置換するには、REPLACE関数、STUFF関数を使用します。REPLACE関数では固定の文字列を検索して置換します。STUFF関数では位置を指定して置換します。

REPLACE関数、STUFF関数の実行例


--文字列を置換
SELECT REPLACE('神戸駅前','駅前','港')
/* → 神戸港 */

SELECT STUFF('神戸駅前', 3, 2, '港')
/* → 神戸港 (3文字目から2文字削除して挿入)*/