SQL Serverにおけるデータ型変換の実践ガイド

SQL Serverでは、CASTCONVERT関数を用いて明示的な型変換が可能です。両者は基本的な変換機能を共に持つものの、CONVERTは日付・時刻や数値の書式指定(styleパラメータ)に対応しており、CASTにはこの機能はありません。

CASTはANSI SQL標準に準拠しているため、移植性を重視する場合に適しています。一方、CONVERTはMicrosoft SQL Server特有の拡張であり、特に日付フォーマット制御が必要な場面で柔軟性が高いです。

構文比較

  • CONVERT(データ型[(長さ)], 式[, スタイル])
  • CAST(式 AS データ型[(長さ)])

パラメータ説明:

  • データ型bigintsql_variantなど、システム提供型のみ許可。ユーザー定義型は使用不可。
  • 長さ:文字列系(charvarcharncharnvarchar)およびバイナリ系(binaryvarbinary)型でのみオプション指定可能。
  • スタイル:日付/時刻または数値を文字列へ変換する際の書式コード(例:103→dd/mm/yyyy、120→yyyy-mm-dd hh:mi:ss)。

基本的な変換例

-- 数値演算と文字列連結の挙動
SELECT 1 + 2 AS result_number;           -- 3(数値加算)
SELECT '1' + '2' AS result_concat;       -- '12'(文字列結合)
SELECT 'abc' + CAST(456 AS VARCHAR(10)) AS combined;  -- 'abc456'

-- 型変換の具体例
SELECT CONVERT(VARCHAR(12), 3.14159) AS pi_text;
SELECT CONVERT(VARCHAR(10), GETDATE(), 126) AS iso_date;  -- ISO 8601形式(yyyy-mm-ddThh:mi:ss.mmm)
SELECT CAST('2024-05-20' AS DATE) AS parsed_date;
SELECT CAST(GETDATE() AS VARCHAR(19));  -- 暗黙的書式(例:'May 20 2024  3:45PM')

代表的な日付スタイルコード

スタイル値 出力例(2024-05-20 15:45:30.123) 説明
10105/20/2024US(MM/dd/yyyy)
10320/05/2024UK(dd/mm/yyyy)
11220240520ISO(yyyymmdd)
1202024-05-20 15:45:30ODBC標準(yyyy-mm-dd hh:mi:ss)
1272024-05-20T15:45:30.123ISO 8601(タイムゾーンなし)

文字列操作補足関数

SELECT UPPER('hello world') AS uppercase;     -- 'HELLO WORLD'
SELECT LOWER('SQL SERVER') AS lowercase;       -- 'sql server'
SELECT LEFT('Database', 4) AS prefix;          -- 'Data'
SELECT LEN('Example') AS length;               -- 7
SELECT SUBSTRING('Programming', 4, 5) AS slice; -- 'gramm'(位置4から5文字)

非推奨型の移行対応(例:image → varbinary)

image型はSQL Server 2005以降非推奨であり、VARBINARY(MAX)への置換が推奨されます。以下は安全な移行手順の一例:

-- 1. 新規列追加
ALTER TABLE Documents ADD SignatureBinary VARBINARY(MAX);

-- 2. データ移行(NULL許容を考慮)
UPDATE Documents 
SET SignatureBinary = CAST(SignatureImage AS VARBINARY(MAX))
WHERE SignatureImage IS NOT NULL;

-- 3. 古い列削除(トランザクション内で実行推奨)
ALTER TABLE Documents DROP COLUMN SignatureImage;

-- 4. 新列名を整合的に変更(必要に応じて)
EXEC sp_rename 'Documents.SignatureBinary', 'Signature', 'COLUMN';

タグ: sql-server cast convert date-formatting Transact-SQL

8月10日 11:15 投稿