SQL Server で使えるデータ型変換の多様な方法
T-SQL Cast と Convert の比較: データ型変換の達人になるためのガイド
SQL Server でデータベースを扱う際、データ型変換は避けられません。データを比較したり、計算したり、適切な形式で表示するために、データ型を別の型に変換する必要があります。
T-SQL には、データ型変換を行う 2 つの主要な関数があります。 CAST と CONVERT です。どちらも同じ目的に使用できますが、いくつかの重要な違いがあります。
データ型変換の魔法使い: CAST
CAST は、データ型変換のシンプルな呪文です。引数としてデータ型と変換したい値を指定するだけで、魔法のようにデータ型を変換できます。
例:
-- 文字列を整数に変換
SELECT CAST('123' AS INT);
-- 整数を文字列に変換
SELECT CAST(123 AS VARCHAR(10));
詳細設定: CONVERT の魔術書
CONVERT は、より詳細な設定を可能にする、高度なデータ型変換の魔術書です。引数としてデータ型だけでなく、スタイルや精度などのオプションも指定できます。
-- 文字列を日付に変換
SELECT CONVERT(DATE, '2024-03-31');
-- 整数を通貨形式に変換
SELECT CONVERT(MONEY, 12345, 2);
賢者の選択: どちらを使うべき?
CAST はシンプルで使いやすく、多くの場合これで十分です。しかし、より詳細な制御が必要な場合は CONVERT を使いましょう。
データ型変換の秘訣
- 変換したいデータ型と変換後のデータ型を理解する。
- オプションやスタイルを必要に応じて指定する。
- エラーが発生する可能性を考慮する。
データ型変換の達人への道
以下のリソースを活用して、データ型変換の達人を目指しましょう。
-- 文字列を整数に変換
SELECT CAST('123' AS INT); -- 結果: 123
SELECT CONVERT(INT, '123'); -- 結果: 123
-- 整数を文字列に変換
SELECT CAST(123 AS VARCHAR(10)); -- 結果: '123'
SELECT CONVERT(VARCHAR(10), 123); -- 結果: '123'
-- 文字列を日付に変換
SELECT CAST('2024-03-31' AS DATE); -- 結果: 2024-03-31
SELECT CONVERT(DATE, '2024-03-31'); -- 結果: 2024-03-31
-- 整数を通貨形式に変換
SELECT CAST(12345 AS MONEY); -- 結果: ¥12,345.00
SELECT CONVERT(MONEY, 12345); -- 結果: ¥12,345.00
-- 日付を文字列に変換
SELECT CAST(GETDATE() AS VARCHAR(10)); -- 結果: '2024-03-31'
SELECT CONVERT(VARCHAR(10), GETDATE()); -- 結果: '2024-03-31'
-- 文字列を小数点に変換
SELECT CAST('12.34' AS DECIMAL(10,2)); -- 結果: 12.34
SELECT CONVERT(DECIMAL(10,2), '12.34'); -- 結果: 12.34
オプションとスタイル
-- 日付をさまざまな形式で表示
SELECT CONVERT(VARCHAR(10), GETDATE(), 101); -- 結果: '2024/03/31'
SELECT CONVERT(VARCHAR(10), GETDATE(), 102); -- 結果: '2024年3月31日'
-- 通貨形式を指定
SELECT CONVERT(MONEY, 12345, 2); -- 結果: ¥12,345.00
SELECT CONVERT(MONEY, 12345, 0); -- 結果: ¥12,345
-- 文字列の長さを指定
SELECT CAST('1234567890' AS VARCHAR(5)); -- 結果: '12345'
エラー処理
-- 変換できない場合のエラー処理
BEGIN TRY
SELECT CAST('abc' AS INT);
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE();
END CATCH;
-- 結果: 'Conversion failed when converting the varchar value 'abc' to data type int.'
データ型変換のその他の方法
T-SQL は、式の中でデータ型が異なる場合でも、暗黙的にデータ型変換を行う場合があります。
SELECT 1 + '1'; -- 結果: 2
-- 暗黙的に '1' を INT 型に変換
ただし、暗黙的なデータ型変換は、精度やデータ損失などの問題を引き起こす可能性があります。そのため、明示的なデータ型変換を使用することを推奨します。
TRY_CONVERT
TRY_CONVERT は、変換が成功した場合のみ結果を返し、失敗した場合には NULL を返す関数です。
SELECT TRY_CONVERT(INT, 'abc'); -- 結果: NULL
-- 'abc' は INT 型に変換できないため、NULL を返す
FORMAT
FORMAT は、数値をさまざまな形式で表示するための関数です。
SELECT FORMAT(12345, 'C2'); -- 結果: ¥12,345.00
-- 12345 を通貨形式で表示
DATETIME 型の関数
DATEADD、DATEDIFF などの DATETIME 型の関数は、日付や時刻の操作に役立ちます。
SELECT DATEADD(dd, 1, GETDATE()); -- 結果: 2024-04-01
-- 今日から1日後の日付を取得
その他の言語固有の関数
データベースプラットフォームによっては、独自のデータ型変換関数を持っている場合があります。
-- PostgreSQL の TO_CHAR 関数
SELECT TO_CHAR(CURRENT_DATE, 'YYYY-MM-DD'); -- 結果: '2024-03-31'
データ型変換は、SQL Server でデータを操作する上で重要な機能です。 CAST と CONVERT は、データ型変換を行うための主要な関数です。それぞれの違いを理解し、状況に応じて適切な関数を選択しましょう。
上記以外にも、データ型変換を行う方法はいくつかあります。それぞれの方法の特徴を理解し、使い分けてください。
sql sql-server database