本気時では、日付やNULLを扱う関数や変換関数を使用してみます。
動作確認は SQL Server 2005 Developer Edition で行いました。T-SQLで使用できる関数に関してオンラインのリンクを掲載しておきます。
関数 (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms174318.aspx
1. 日付関数
日付を取り扱う関数の使用サンプルを掲載します。現在日時を求めるにはGETDATE(), CURRENT_TIMESTAMP, GETUTCDATE() などを使用します。日時を足すにはDATEADD 関数。年月日曜日、時間の特定の値を整数値として使用するにはDATEPART(), YEAR() 関数などを使用します。
入力された文字列が日付フォーマット化はISDATE()関数を使用します。
-- 現在日付を取得する,GETUTCDATE()はUTC時間を返す SELECT GETDATE(), CURRENT_TIMESTAMP, GETUTCDATE() -- 日時を加える -- 第一引数(datepart)にはyy,qq,mmなど加算する -- 単位を指定可能。詳細はBOOKS ONLINE参照 SELECT DATEADD(dd, 1, GETDATE()) -- 日時の時差を表示する DECLARE @Start DATETIME DECLARE @End DATETIME SET @Start = GETDATE() SET @End = DATEADD(dd, 1, GETDATE()) SELECT DATEDIFF(d, @Start, @End) -- 日時、曜日の名前を取得する SELECT DATENAME( dw, GETDATE()) -- 日時、曜日で指定された年月日曜日の数値を取得する SELECT DATEPART(dd, GETDATE()) -- 日付(12など) SELECT DATEPART(yy, GETDATE()) -- 年(2009など) -- DATEPARTと同様に、年月日を抜き出して -- 表示する SELECT DAY(GETDATE()) SELECT MONTH(GETDATE()) SELECT YEAR(GETDATE()) -- 日付かを調べる SELECT ISDATE('2005/4/2') SELECT ISDATE('4/2/2005')
2. NULLを扱う関数
NULLを扱う関数のサンプルを掲載します。IS NULL はWHERE句やIF文などで値がNULL蚊を調べるのに使用します。ISNULLは第一引数がNULLの場合第二引数を値とする関数で、NULLIFは第一、第二引数が等しい場合にNULLとなる関数です。COALESCEは引数のなかで最初にNULLでない値を返します。
-- 値がNULLかを調べる DECLARE @test int SET @test = NULL IF @test IS NULL PRINT '@test is NULL' IF @test IS NOT NULL PRINT '@test is not NULL' -- 引数1,2が等しい場合はNULL -- 等しくない場合は第一引数が返る SELECT NULLIF(1,1) SELECT NULLIF(1,2) -- 第一引数がNULLの場合は第二引数が値となる -- そうでない場合は第一引数が値となる SELECT ISNULL(NULL, '3') -- 引数の中から、NULL でない最初の式を返す SELECT COALESCE(NULL,NULL,2,NULL)
3.変換関数
データ型の変換にはCAST()関数とCONVERT関数を使用します。 DateTime型を特定のフォーマットの文字列とするにはCONVERTにstyleを指定します。下記サンプルでもyyyy/mm/dd形式に変換するサンプルを掲載しています。指定可能なスタイルの種類はBooks Online を参照願います。
-- yyyy/mm/dd形式に変換 SELECT CONVERT(varchar(10),GETDATE(), 111) -- yyyymmdd形式に変換 SELECT CONVERT(varchar(10),GETDATE(), 112) -- XML型にキャスト SELECT CAST ('<test>hello</test>' AS XML)
4.そのほか
そのほか便利そうな関数を掲載します。引数で指定された文字列が数値かを調べるにはISNUMERIC()関数を使用します。QUOTENAME()関数を使用するとSQL Server の識別子を表すように[]で文字列が囲まれ、文字列中の[や]はエスケープされた文字列が返されます。DATALENGTHは指定された式を表すのに必要なバイト数を返します。
-- 入力文字列から区切り記号で囲まれた有効な -- Microsoft SQL Server 2005 識別子を作成します。 SELECT QUOTENAME(N't[]est') -- [t[]]est] となる -- 引数が数値化を判定します SELECT ISNUMERIC('12') SELECT DATALENGTH(N'test') -- 結果は8
5.まとめ
今回の説明は以上です。SQL Server では、さまざまな関数が用意されています。ここですべてを紹介できませんが、Books Onlineを調べるといろいろ新しい発見があると思います。
5.1 文字列関数
文字列関数を調べていたらいくつか知らないものがあったので、関数名と機能説明の表をメモとして作成しておきます。説明自体はBOOKS Onlineの内容です。関数一覧からリンクをクリックしないと説明が表示されないので一覧として確認できるように表に含めました。
関数名 | 機能 |
ASCII | 文字式の左端の文字の ASCII コード値を返します。 |
CHAR | ASCII コードを文字に変換します。 |
CHARINDEX | 指定された式の文字列の中での開始位置を返します。 |
PATINDEX | すべて有効なテキスト型と文字型で指定された式の中で、パターンが最初に現れる先頭位置を返します。パターンが見つからない場合は、0 を返します。 |
LEFT | 文字列の左端から指定された数の文字を返します。 |
RIGHT | 文字列の右端から指定された数の文字を返します。 |
LEN | 指定した文字列式の、末尾の空白を除いた文字数を返します。バイト数ではありません。 |
LOWER | 大文字が小文字に変換された状態の文字式を返します。 |
UPPER | 小文字データを大文字に変換して文字式を返します。 |
LTRIM | 先頭の空白を削除した後の文字式を返します。 |
RTRIM | 後続するすべての空白を切り捨てた後の文字列を返します。 |
NCHAR | Unicode 標準の定義に従って、指定された整数コードの Unicode 文字を返します。 |
UNICODE | Unicode 標準に定義された、入力式の先頭文字の整数値を返します。 |
QUOTENAME | Unicode 文字列に区切り記号を追加して返すことで、入力文字列から区切り記号で囲まれた有効な Microsoft SQL Server 2005 識別子を作成します。 |
REPLACE |
1 番目に指定した文字列式の中から、2 番目に指定した文字列のすべてを、3 番目に指定した文字列で置き換えます。 |
REPLICATE | 文字式を指定した回数繰り返します。 |
REVERSE | 文字式を逆に並べ替えたものを返します。 |
SPACE | 連続する空白文字で構成される文字列を返します。 |
STR | 数値データから変換された文字データを返します。 |
STUFF | 指定した長さ分の文字を削除し、指定した開始位置に別の文字列を挿入します。 |
SUBSTRING | 文字、バイナリ、テキスト、またはイメージ型の式の一部を返します。 |
5.2 集計関数
同様に集計関数を表にまとめました。
AVG | グループ内の値の平均を返します。NULL 値は無視されます。 |
CHECKSUM | テーブルの 1 つの行、または一連の式に対して計算されたチェックサム値を返します。CHECKSUM は、ハッシュ インデックスの作成に使用します。 |
CHECKSUM_AGG | グループ内にある値のチェックサムを返します。NULL 値は無視されます。 |
COUNT | グループ内のアイテム数を返します。COUNT_BIG と COUNT 関数の違いは、戻り値のデータ型だけです。COUNT は常に int 型の値を返します。COUNT_BIG は常に bigint 型の値を返します。 |
COUNT_BIG |
グループ内の項目数を返します。COUNT_BIG は COUNT 関数と同じように動作します。2 つの関数の違いは、戻り値のデータ型だけです。COUNT_BIG は常に bigint 型の値を返します。COUNT は常に int 型の値を返します。 |
GROUPING |
追加された列を出力する集計関数です。CUBE または ROLLUP 演算子によって行を追加するときは値 1、行が CUBE と ROLLUP のどちらの結果でもないときは値 0 がそれぞれ使用されます。 |
MAX | 式の最大値を返します。 |
MIN | 式内の最小値を返します。 |
SUM | 式の、すべての値または DISTINCT 値のみの合計を返します。SUM は、数値型列に対して使用できます。NULL 値は無視されます。 |
STDEV | 指定された式にあるすべての値の統計的標準偏差を返します |
STDEVP | 指定された式のすべての値を母集団として標準偏差を返します。 |
VAR | 指定された式のすべての値の統計的変位を返します。 |
VARP | 指定した式のすべての値について、母集団に対する統計的変位を返します。 |
間違、指摘点などがありましたらご連絡ください。では。
さんのコメント: さんのコメント: