データベース千夜一夜第22回

SQLと関数~文字列関数と日付関数 長谷川裕行
有限会社 手國堂

+演算子による文字列と日時の加算

+演算子は、通常は数値型データの加算に用いる四則演算子です。しかしこの演算子は、文字列型や日付/時刻型の値に対しても使うことができます。

文字列型の値に+演算子を用いると、文字列と文字列を連結できます。この場合の+記号を「文字列連結演算子」(SQL Serverのオンラインヘルプでは「文字列連結オペレータ」)と呼んでいます。

例:テーブル「得意先_mr」の「氏名」フィールドの値(顧客の氏名)に「様」を付け足して表示します。

  SELECT お客様ID, 氏名 + ' 様' FROM 得意先_mr


日付/時刻型の値に+演算子を用いると、日時の加算が行えます。

例:1時間後の時刻を計算します。

  SELECT GETDATE() + '1:0:0'

また、日付/時刻型の値に対しては-演算子で期間・経過時間を求めることもできます。

例:1時間前の時刻を計算します。

  SELECT GETDATE() - '1:0:0'

日付/時刻の加算ではDATEADD関数、減算ではDATEDIFF関数が同じ働きをします。+/-演算子による日付の加減算は式自体が直接的で分かりやすいというメリットがありますが、半面、他の機能を提供する日付関数と書式が異なるため、日付/時刻の計算処理であることが分かりにくくなります。

また、SQL Serverでは年の値を1753~9999までの範囲としているため、単純に「1年を加算」するような場合に「GETDATE() + '1'」などとするとエラーになります。日付/時刻の計算には関数を使った方がよいでしょう。


あとがき

文字列関数は、フィールドの値そのままだと読み取りにくい数値を読みやすくしたり、文字列を一時的に特定の文字列に置き換えたりすることで、抽出結果を見やすく分かりやすい形に整形できます。

日付関数は、日付/時刻型のフィールドの値を元に、作業期間や勤務時間、年齢などの情報を計算する際に役立ちます。これは、アプリケーションのレベルで各言語の命令を用いて計算することも可能ですが、結果セットとしてSQLのレベルでそれらを取得できれば、グリッドやテキストボックスへ表示する際にアプリケーションのソースコードを記述する必要がなくなります。

今回の例でもいくつか取り上げたように、ある関数の引数に別の関数の処理結果を用いるなど、入れ子構造にすることで式を単純化できることもメリットです。但し、CやVBの関数のように小回りの利く処理は作れません。あくまで、結果セットを大まかに整形することが目的です。最終的な文字列の整形は、アプリケーションのレベルで各プログラミング言語の命令によって再加工する必要があります。

同じ結果を得るための処理をSQLの関数で行うか、それともアプリケーション側でソースを記述するべきかについては、ストアドプロシージャの解説時に詳しくお話ししようと思います。


Downloadサンプルファイル (LZH形式 1.32KB)




トップページ
関数の互換性
文字列関数
日付関数
+演算子による文字列と日時の加算
あとがき
Copyright © MESCIUS inc. All rights reserved.