【ハウツー】
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 Serverをインストールしている環境がある場合は、実際に実行することで理解を深めることができるでしょう。
なお、本稿では、SQL Server 2005(2008) Express Editionにて動作確認を行っています。
ページの都合上、全ての機能を紹介しきれない関数もあります。また、旧バージョンとの互換性のために残されている関数なども紹介していません。そのため、これらの関数の詳細を調べたい場合は、以下のリンクにあるMSDN(Microsoftの開発ドキュメント)を参照すると良いでしょう。
・SQL Server 2008 関数
・SQL Server 2005 関数
それでは、文字列の取り出し、検索、置換といった関数から紹介していきます。
| 関数名 | 戻り値 | 説明 |
|---|---|---|
| LEFT | 文字列(入力値依存) | 指定した長さの文字列を左端から返します |
| RIGHT | 文字列(入力値依存) | 指定した長さの文字列を右端から返します |
| SUBSTRING | 文字列(入力値依存) | 指定した場所から指定した長さの文字(イメージ)を取り出します |
| CHARINDEX | 数値(入力値依存) | 文字列を検索し、見つかった場合は、その開始位置を返します。見つからない場合は0を返します |
| PATINDEX | 数値(入力値依存) | ワイルドカードを使ったパターンで文字列を検索し、見つかった場合は、その開始位置を返します。見つからない場合は0を返します。 |
| REPLACE | 文字列(入力値依存) | 文字列を置換します |
| STUFF | 文字列(入力値依存) | 指定した場所から指定した長さの文字を削除して、新しい文字列を挿入します |
文字列の一部を取り出すには、LEFT関数、RIGHT関数、SUBSTRING関数を使用します。LEFT関数は先頭(左側)、RIGHT関数は行末(右側)、SUBSTRING関数は任意位置の文字列を取得することができます。
--文字の取り出し
SELECT LEFT('東京都世田谷区',3)
/* → 東京都 (左から3文字)*/
SELECT RIGHT('東京都世田谷区',4)
/* → 世田谷区 (右から4文字)*/
SELECT SUBSTRING('今日は金曜日', 4, 2)
/* → 金曜 (4文字目から2文字取得)*/
文字列を検索するには、CHARINDEX関数、PATINDEX関数を使用します。それぞれ、見つかった文字列の開始位置を返します。CHARINDEX関数では固定の文字列を検索できます。 PATINDEX関数では、ワイルドカードを使ったパターン文字列で検索できます。ワイルドカードとして、%:任意の文字列、_:任意の1文字、[]:範囲、[^]:除外範囲を利用できます。
--文字列の場所を検索
SELECT CHARINDEX('千葉','千葉県千葉市')
/* → 1 (千葉を検索)*/
SELECT CHARINDEX('東京','千葉県千葉市')
/* → 0 (東京を検索)*/
SELECT CHARINDEX('千葉','千葉県千葉市',2)
/* → 4 (2文字目以降で千葉を検索)*/
--ワイルドカードを使って検索
SELECT PATINDEX('%[都道府県]%' , '東京都中央区')
/* → 3 (都を検索)*/
SELECT PATINDEX('%[都道府県]%' , '神奈川県横浜市')
/* → 4 (県を検索)*/
文字列を置換するには、REPLACE関数、STUFF関数を使用します。REPLACE関数では固定の文字列を検索して置換します。STUFF関数では位置を指定して置換します。
--文字列を置換
SELECT REPLACE('神戸駅前','駅前','港')
/* → 神戸港 */
SELECT STUFF('神戸駅前', 3, 2, '港')
/* → 神戸港 (3文字目から2文字削除して挿入)*/
| トマトを食べれば痩せられる!? -京大ら、新発見の成分で肥満改善効果を実証 [21:00 2/10] |
| JAXA、液体シリコン中に残存する共有結合を観察 -大口径ウェハの実現に期待 [20:11 2/10] |
| NEDOなど、熱膨張が小さな樹脂複合材料ペレットの量産化に成功 [19:22 2/10] |
| 理研、一般顕微鏡を蛍光顕微鏡に強化できるアダプタを試作して性能を実証 [19:15 2/10] |
| 天の川のブラックホールが小惑星を飲み込んでいる - NASAが発表 [18:08 2/10] |
|
目的は一体!? 肥前夢街道に現るバッジ売りの少猫(佐賀県) [12:08 2/11] キャリア |
|
つらい花粉症は対策グッズで乗り切ろう! [12:07 2/11] キャリア |
|
【アジア発!Breaking News】マンションの排水口で銃の試し打ち。階下水漏れで、銃器所持の男らを逮捕。(台湾) [12:07 2/11] キャリア |
|
【エンタがビタミン♪】『逆転裁判』の斎藤工、“ラー油入り手作りチョコ”で女性不信に。 [12:07 2/11] キャリア |
|
本当にうまくいく!カップルの組み合わせは『幹タイプ×枝タイプ=一本の木』 [12:06 2/11] キャリア |