SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

進化したSQL Server 2012の新機能紹介

検索効率を向上させる新たな機能
――類似データ抽出、空間、関数

進化したSQL Server 2012の新機能紹介(6)

  • X ポスト
  • このエントリーをはてなブックマークに追加

使い勝手が向上する新しい関数

 SQL Server 2012では、新たに14個のTransact-SQL関数が追加されました(表1)。その内、9つの関数はデータ型に焦点を当てたもので、型変換の関数、返す結果が型指定されている関数でデスクトップアプリケーションを意識した追加となっています。

表1 追加された14個の関数
カテゴリ 関数 概要
変換関数 PARSE(変換する対象文字列 AS データ型 USING カルチャー指定) 文字列から日付時刻型、数値型への変換。
(例) 「\1000」のような文字列を「ja-jp」国指定でmoney型「1000.00」に変換。
TRY_CONVERT(データ型 , 変換する値) 指定したデータ型への変換。変換に失敗するとNULLを返す。
(例) データ型をdatetime2、変換する文字列を2012/06/01とすると、datetime2に変換される。
TRY_PARSE(変換する対象文字列 AS データ型 USING カルチャー指定) 文字列から日付時刻型、数値型への変換。PARSEは変換に失敗するとエラーになるが、こちらは変換に失敗するとNULLを返す。
日付と時刻の関数 DATEFROMPARTS(年 , 月 , 日) 引数に渡された数字を組み立てて、DATE型を返す。
DATETIME2FROMPARTS(年,月,日,時間,分,秒,少数) 引数に渡された数字を組み立てて、DATETIME2型を返す。
DATETIMEFROMPARTS(年,月,日,時間,分,秒,少数) 引数に渡された数字を組み立てて、DATETIME型を返す。
DATETIMEOFFSETFROMPARTS(年,月,日,時間,分,秒,少数,タイムゾーン時間,タイムゾーン部分,有効桁数) 引数に渡された数字を組み立てて、DATETIMEOFFSET型を返す。
EOMONTH(日にち,何か月後かの指定) 月末の日付を返す。
SMALLDATETIMEFROMPARTS(年,月,日,時間,分) 引数に渡された数字を組み立てて、SMALLDATETIME型を返す。
TIMEFROMPARTS(時間,分,秒,少数,有効桁数) 引数に渡された数字を組み立てて、TIME型を返す。
論理関数 CHOOSE(インデックス,リスト1,リスト2・・・・) 第一引数で指定した数字番目を、第二引数以降から数えて選択する。
IIF(条件,Trueの時に返す値,Falseの時に返す値) 第一引数がTRUEの場合、第二引数を返し、第一引数がFALSEの場合、第三引数を返す。
文字列関数 CONCAT(連結する文字列1,文字列2・・・・) 引数に指定した文字列を結合した結果を返す。
FORMAT(対象の値,フォーマット,カルチャー指定) 第一引数の文字列を、第三引数で指定したロケーションに対応する第二引数で指定した書式で変換した結果を返す。

 追加された関数の内、比較的使用頻度が高くなりそうなENMONTHとCHOOSE、IIF関数について個別に使用方法を説明します。

月末日を取得できる日付計算関数ENMONTH

 月末を返すENMONTH関数は、指定日が含まれた月の最後の日付を取得することができます。リスト10を実行すると、「2012-02-29」を取得できます。

リスト10 月末を返すENMONTH関数の使用例
SELECT EOMONTH ('2012/2/5')

 ENMONTHの第2引数には、指定日に月数を追加できます。例えば、「2」を指定すると指定日の2か月後の月末を取得でき、「-3」を指定すると3か月前の月末を取得できます。リスト11は、クエリ実行日の3か月前の月末日を取得するクエリです。

リスト11 3か月前の月末を返すENMONTH関数の使用例
SELECT EOMONTH (Getdate(),-3)

リストから番目を指定して値を取得できるCHOOSE

 CHOOSE関数は、値一覧から指定したインデックスにある項目を返します。リスト12のように変数でインデックスを指定することもできます。インデックスは1からカウントされますので、このクエリを実行すると3番目の「test2」が返ってきます。プロシージャでの記述の簡潔化が期待できます。

リスト12 CHOOSEの使用例
DECLARE @targetIndex int
SET @targetIndex = 3
SELECT
  CHOOSE(@targetIndex,'test','test1','test2','test3','test4')  // 出力:test2

CASE文を簡易表記できる値取得IIF

 条件がTrueかFalseかによって、2つの値のいずれかを返します。IIFはCASE文を簡略化して記述するための関数です(注2)。SQL Serverの動作的には、実行時にCASE文に暗黙的に変換されるので、記述面の簡便性のみに役立ちます。リスト13を実行すると「条件不適合」が返ってきます。

リスト13 CHOOSEの使用例
DECLARE @a int
SET @a = 3
SELECT IIF(@a>5,'条件合致','条件不適合')  // 出力:条件不適合
注2

 IIFは、IF~ELSEと似ていますが、IF~ELSEは実行するクエリを制御するために使用します。

次のページ
空間の取り扱いが強化

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
進化したSQL Server 2012の新機能紹介連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 大和屋 貴仁(ヤマトヤ タカヒト )

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6682 2012/08/01 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング