2012/2/25 SQLTO #4
   青木 淳夫(Atsuo AOKI)
    ◦ http://d.hatena.ne.jp/aoki1210
    ◦ Twitter @aoki1210
   Nextscapeという会社でエンジニアやってます。
    ◦ 仕事は、C#、ASP.NET(MVC)、Azure、Sitecoreなど
      使ってます。
    ◦ .NETなエンジニア募集中です。
   その他
    ◦ OSS、アジャイル好き。
    ◦ .Net Clipsというまとめサイトもやってます。
    ◦ 関西人(神戸出身)です。
   T-SQLの関数を簡単に整理して
    紹介したいです。
    ◦ MSDN、TechNetは情報が充実しす
      ぎて、SQL Server初心者には難し
      い・・
      http://msdn.microsoft.com/ja-
       jp/library/ms174318.aspx
    ◦ 数年前、メインDBがOracleから
      SQL Serverに変わった時に「Oracle
      のこの関数はSQL Serverではどう書
      くの?」で苦しんだため。
   T-SQLの関数を、既に整理済み。
   2008年ごろにマイナビに頑張っ
    て連載しました。
     http://news.mynavi.jp/articles/2008
      /10/22/tsql/index.html
     http://news.mynavi.jp/articles/2008
      /10/28/tsql/index.html
     http://news.mynavi.jp/articles/2008
      /10/31/tsql/index.html
   検索エンジンの評価が低く、たぶんあまり見られ
    ていない。
   タイトルを「T-SQLの関数」にしたのが良くな
    かった。「SQL Serverの関数」にすればよかっ
    た・・
   一番、伝えたいことを最初に言うと良いらしい。




   ぜひ、マイナビの記事「Transact-SQLの関数を
    理解しよう」をよろしくお願いします。
開発で使う主要な関数は大きくわけて、次の5つに
分類できます。

   文字列系
   数学系
   日付系
   NULL系
   変換系
これから、関数名を一覧で表示しますので、関数の
内容が何かあててみてください。

ちなみに正解分からないかも・・・フォローお願い
します。(3年も前なので)
関数名         説明
LEFT        文字列の一部を左端から取得

RIGHT       文字列の一部を右端から取得

SUBSTRING   一部の文字(イメージ)を取得

CHARINDEX   文字列を検索


PATINDEX    ワイルドカードのパターンで文字列を検索

REPLACE     文字列を置換

STUFF       位置を指定して文字列を置換
関数名         説明

SPACE       半角スペースの繰り返し

REPLICATE   文字列の繰り返し

LOWER       大文字を小文字に変換

UPPER       小文字を大文字に変換

REVERSE     文字式の前後逆転

STR         数値データを文字データに変換 (四捨五入可能)

LTRIM       先頭空白を削除
RTRIM       行末空白を削除
関数名          説明

LEN          文字数

DATALENGTH   バイト数

ASCII        ASCIIコード

CHAR         ASCIIコード(0~255)の文字


UNICODE      Unicodeの整数コード


NCHAR        整数コード(0~65535)のUnicode文字
関数名                 説明

ISDATE              日付時刻妥当性

GETDATE             現在時刻
CURRENT_TIMESTAMP   現在時刻 (ANSI SQL)

GETUTCDATE          現在時刻 (UTC時刻)

SYSDATETIME         現在時刻。DateTime2型:2008以降

                    現在時刻(タイムゾーンオフセット含む) :2008以
SYSDATETIMEOFFSET
                    降

SYSUTCDATETIME      現在時刻(UTC時刻)。DateTime2型 2008以降
関数名        説明
YEAR       年
MONTH      月
DAY        日


DATENAME   特定部分(年月日時分秒等)を文字列取り出し



DATEPART   特定部分(年月日時分秒等)を数値取り出し


DATEADD    日付に期間を加算

DATEDIFF   2つの日付間の差
関数名         説明
ISNUMERIC   数値妥当性
ROUND       丸め
CEILING     最小整数
FLOOR       最大整数
RAND        乱数を生成
ABS         正の絶対値
SIGN        符号
SQUARE      2乗
SQRT        平方根
POWER       べき乗値
関数名        説明
ISNULL     NULL時の指定値
COALESCE   NULLでない最初の値

NULLIF     値が等しい場合にNULL、値が異なる場合に1つ目の引数値。


CASE       複数の条件を評価


関数名        説明

CAST       別のデータ型に変換(ISO準拠)


CONVERT    別のデータ型に変換。
   SQL Serverに無い関数は自分で実装
    してください。
    ◦ ユーザー定義関数を作るかどうかの好みは
      わかれますよね。

   Microsoftが提供している無料ツール
    「SSMA(SQL Server Migration
    Assistant)」が参考になります。
    ◦ Oracle、MySQL、Sybase、Accessから
      SQL Server(SQL Azure)に移行するための
      ツール。
    ◦ Oracleを例にすると、TO_CHAR、
      TO_DATE、LPAD、TRUNC、LAST_DAY関
      数などの実装例が見れます。
   マイナビの記事「Transact-SQLの関数を理解し
    よう」をよろしくお願いします。
   以下の記事はSQL Server Management Studioで
    すぐ試せるサンプル付きです!
    ◦ http://news.mynavi.jp/articles/2008/10/22/tsql/in
      dex.html
    ◦ http://news.mynavi.jp/articles/2008/10/28/tsql/in
      dex.html
      http://news.mynavi.jp/articles/2008/10/31/tsql/in
      dex.html

SQL Serverの関数を一覧でマスターしよう

  • 1.
  • 2.
    青木 淳夫(Atsuo AOKI) ◦ http://d.hatena.ne.jp/aoki1210 ◦ Twitter @aoki1210  Nextscapeという会社でエンジニアやってます。 ◦ 仕事は、C#、ASP.NET(MVC)、Azure、Sitecoreなど 使ってます。 ◦ .NETなエンジニア募集中です。  その他 ◦ OSS、アジャイル好き。 ◦ .Net Clipsというまとめサイトもやってます。 ◦ 関西人(神戸出身)です。
  • 3.
    T-SQLの関数を簡単に整理して 紹介したいです。 ◦ MSDN、TechNetは情報が充実しす ぎて、SQL Server初心者には難し い・・  http://msdn.microsoft.com/ja- jp/library/ms174318.aspx ◦ 数年前、メインDBがOracleから SQL Serverに変わった時に「Oracle のこの関数はSQL Serverではどう書 くの?」で苦しんだため。
  • 4.
    T-SQLの関数を、既に整理済み。  2008年ごろにマイナビに頑張っ て連載しました。  http://news.mynavi.jp/articles/2008 /10/22/tsql/index.html  http://news.mynavi.jp/articles/2008 /10/28/tsql/index.html  http://news.mynavi.jp/articles/2008 /10/31/tsql/index.html
  • 5.
    検索エンジンの評価が低く、たぶんあまり見られ ていない。  タイトルを「T-SQLの関数」にしたのが良くな かった。「SQL Serverの関数」にすればよかっ た・・
  • 6.
    一番、伝えたいことを最初に言うと良いらしい。  ぜひ、マイナビの記事「Transact-SQLの関数を 理解しよう」をよろしくお願いします。
  • 7.
    開発で使う主要な関数は大きくわけて、次の5つに 分類できます。  文字列系  数学系  日付系  NULL系  変換系
  • 8.
  • 9.
    関数名 説明 LEFT 文字列の一部を左端から取得 RIGHT 文字列の一部を右端から取得 SUBSTRING 一部の文字(イメージ)を取得 CHARINDEX 文字列を検索 PATINDEX ワイルドカードのパターンで文字列を検索 REPLACE 文字列を置換 STUFF 位置を指定して文字列を置換
  • 10.
    関数名 説明 SPACE 半角スペースの繰り返し REPLICATE 文字列の繰り返し LOWER 大文字を小文字に変換 UPPER 小文字を大文字に変換 REVERSE 文字式の前後逆転 STR 数値データを文字データに変換 (四捨五入可能) LTRIM 先頭空白を削除 RTRIM 行末空白を削除
  • 11.
    関数名 説明 LEN 文字数 DATALENGTH バイト数 ASCII ASCIIコード CHAR ASCIIコード(0~255)の文字 UNICODE Unicodeの整数コード NCHAR 整数コード(0~65535)のUnicode文字
  • 12.
    関数名 説明 ISDATE 日付時刻妥当性 GETDATE 現在時刻 CURRENT_TIMESTAMP 現在時刻 (ANSI SQL) GETUTCDATE 現在時刻 (UTC時刻) SYSDATETIME 現在時刻。DateTime2型:2008以降 現在時刻(タイムゾーンオフセット含む) :2008以 SYSDATETIMEOFFSET 降 SYSUTCDATETIME 現在時刻(UTC時刻)。DateTime2型 2008以降
  • 13.
    関数名 説明 YEAR 年 MONTH 月 DAY 日 DATENAME 特定部分(年月日時分秒等)を文字列取り出し DATEPART 特定部分(年月日時分秒等)を数値取り出し DATEADD 日付に期間を加算 DATEDIFF 2つの日付間の差
  • 14.
    関数名 説明 ISNUMERIC 数値妥当性 ROUND 丸め CEILING 最小整数 FLOOR 最大整数 RAND 乱数を生成 ABS 正の絶対値 SIGN 符号 SQUARE 2乗 SQRT 平方根 POWER べき乗値
  • 15.
    関数名 説明 ISNULL NULL時の指定値 COALESCE NULLでない最初の値 NULLIF 値が等しい場合にNULL、値が異なる場合に1つ目の引数値。 CASE 複数の条件を評価 関数名 説明 CAST 別のデータ型に変換(ISO準拠) CONVERT 別のデータ型に変換。
  • 16.
    SQL Serverに無い関数は自分で実装 してください。 ◦ ユーザー定義関数を作るかどうかの好みは わかれますよね。  Microsoftが提供している無料ツール 「SSMA(SQL Server Migration Assistant)」が参考になります。 ◦ Oracle、MySQL、Sybase、Accessから SQL Server(SQL Azure)に移行するための ツール。 ◦ Oracleを例にすると、TO_CHAR、 TO_DATE、LPAD、TRUNC、LAST_DAY関 数などの実装例が見れます。
  • 17.
    マイナビの記事「Transact-SQLの関数を理解し よう」をよろしくお願いします。  以下の記事はSQL Server Management Studioで すぐ試せるサンプル付きです! ◦ http://news.mynavi.jp/articles/2008/10/22/tsql/in dex.html ◦ http://news.mynavi.jp/articles/2008/10/28/tsql/in dex.html http://news.mynavi.jp/articles/2008/10/31/tsql/in dex.html