SQL
関数
MID
MID({対象の文字列}, {何文字目から}, {何文字分抽出するか})
文字列を抽出する関数
SELECT MID('123456789', 2, 2)
-> 23
TOP
SELECT TOP {何行} * FROM table
SQL結果のレコード数を指定できる関数
上から何行分出力するかを指定できる
SELECT TOP 3 * FROM table;
GETDATE
SELECT GETDATE()
現在の日時を取得する関数
SELECT * FROM table
WHERE start_date <= GETDATE();
DATETIME
SELECT DATETIME(GETDATE(), '%Y-%m-%d')
日付の出力形式を整形する関数
CONVERT
CONVERT({型名}, {対象文字列})
型変換を行う関数
CONVERT(NVARCHAR,100.00)
UNION
{SELECT文} UNION {SELECT文}
二つのSQL結果を縦につなげて1つの実行結果のように見せる関数
- レコードが重複しない
- 出力結果が同じテーブル構造でないといけない
SELECT * FROM table1
UNION
SELECT * FROM table2
CONCAT
CONCAT({対象文字列1}, {対象文字列2}, ....)
複数のカラムを結合して表示できる関数
- NULLも結合できる("+"で結合した場合、すべてNULLになる)
SELECT CONCAT("hoge", NULL, "fuga")
-> hogefuga
ISNULL
ISNULL({対象}, {置き換え後の文字列})
対象がNULLの場合に置き換える関数
SELECT ISNULL(NULL, "test")
-> "test"
システム変数
@@ROWCOUNT
直前のSQLで影響を受けたレコード数を持つ変数
SELECT文で3行表示されれば3を持つし、UPDATEで5行更新したら5を持つ
レコードの存在チェックに使える
記法
JOINとEXISTSの使い分け
どちらも2つのテーブルをつなげて条件を付けることができる
- JOINの場合
- 結合される側のテーブルの同じレコードが複数できる
- バリエーションをすべて見たかったらこっち
- EXISTSの場合
- 結合される側のテーブルは複製されない
- 重複しない単純な種類数を見たかったらこっち
CASE文
- 単純CASE式
- 対象の1データに対して条件をかけて分岐させたいとき
CASE column
WHEN '男' THEN 1
WHEN '女' THEN 2
ELSE 3
END
- 検索CASE式
- 条件によって使うデータを複数パターンで切り替えたいとき
CASE
WHEN sale IS NOT NULL THEN sale_price
WHEN tax IS NOT NULL THEN tax_price
ELSE price
END
IF文
IF 条件1
BEGIN
実行文1
END
ELSE IF 条件2
BEGIN
実行文2
END
ELSE
BEGIN
実行文3
END
変数
SQLも変数を使える
DEWCLARE @price INT(8)
SELECT @price = price FROM table
型
VARCHAR と NVARCHAR
型 | 特徴 | サイズ | Umicode |
---|---|---|---|
VARCHAR | 可変長 | 8000 B | - |
NVARCHAR | 可変長 | 8000文字 | 〇 |
CHAR | 固定長 | 8000 B | - |
NCHAR | 固定長 | 8000文字 | 〇 |