データ型の変換 (データベース エンジン)
データ型は、以下のシナリオで変換される場合があります。
あるオブジェクトのデータを他のオブジェクトのデータに移動、比較、または結合する場合は、あるオブジェクトのデータ型から他のオブジェクトのデータ型への変換が必要な場合があります。
Transact-SQL 結果列、リターン コード、または出力パラメーターのデータをプログラム変数に移動する場合は、SQL Server のシステム データ型から変数のデータ型にデータを変換する必要があります。
アプリケーション変数と SQL Server の結果セット列、リターン コード、パラメーター、またはパラメーター マーカーの間でデータ型を変換する場合、サポートされるデータ型変換はデータベース API によって決まります。
暗黙的なデータ変換と明示的なデータ変換
データ型は、暗黙的または明示的に変換できます。
暗黙的な変換はユーザーが意識する必要はありません。 SQL Server がデータのデータ型を自動的に変換します。 たとえば、smallint 型を int 型と比較する場合、比較を実行する前に、smallint 型から int 型に暗黙的に変換されます。
GETDATE() では、日付スタイル 0 への変換が暗黙的に行われます。 SYSDATETIME() では、日付スタイル 21 への変換が暗黙的に行われます。
明示的な変換では、CAST 関数または CONVERT 関数を使用します。
CAST と CONVERT の各関数は、値 (ローカル変数、列、または他の式) のデータ型を変換します。 たとえば、次の CAST 関数は数値 $157.27 を文字列 '157.27' に変換します。
CAST ( $157.27 AS VARCHAR(10) )
Transact-SQL プログラム コードを ISO に準拠させる場合は、CONVERT ではなく CAST を使用します。 CONVERT のスタイル機能を利用する場合は、CAST ではなく CONVERT を使用します。
次の図は、SQL Server システムで提供されるデータ型に許可されている、すべての明示的および暗黙的なデータ型変換です。 これには、xml、bigint、および sql_variant 型が含まれます。 代入時に sql_variant 型からの暗黙的な変換は行われませんが、sql_variant 型への暗黙的な変換は行われます。
データ型変換の動作
SQL Server オブジェクト間のデータ型の変換を行う場合、暗黙的または明示的なデータ型変換がサポートされない場合があります。 たとえば、nchar 型の値を image 型の値に変換することはできません。 nchar 型の値は明示的な変換によってのみ binary 型の値に変換できます。binary 型の値への暗黙的な変換はサポートされません。 ただし、nchar 型の値は暗黙的、明示的のどちらでも nvarchar 型の値に変換できます。
次のトピックでは、以下の対応するデータ型変換の動作について説明します。
OLE オートメーション ストアド プロシージャを使用したデータ型の変換
SQL Server は Transact-SQL のデータ型を使用し、OLE オートメーションは Visual Basic のデータ型を使用するので、OLE オートメーション ストアド プロシージャでは両方の間で渡されるデータの型を変換する必要があります。
次の表は、SQL Server データ型から Visual Basic データ型への変換を示します。
SQL Server データ型 |
Visual Basic データ型 |
---|---|
char, varchar, text, nvarchar, ntext |
String |
decimal,numeric |
String |
bit |
Boolean |
binary, varbinary, image |
1 次元 Byte() 配列 |
int |
Long |
smallint |
Integer |
tinyint |
Byte |
float |
Double |
real |
Single |
money,smallmoney |
Currency |
datetime,smalldatetime |
Date |
上記以外は NULL に設定 |
Variant は Null に設定 |
binary、varbinary、および image の各型の値を除いて、1 つの SQL Server 値は 1 つの Visual Basic 値に変換されます。 これらの値は Visual Basic の 1 次元 Byte() 配列に変換されます。 この配列の範囲は Byte(0 ~ length1) です。length は SQL Server の binary 型、varbinary 型、または image 型の各値のバイト数です。
次の表は、Visual Basic データ型から SQL Server データ型への変換を示しています。
Visual Basic データ型 |
SQL Server データ型 |
---|---|
Long, Integer, Byte, Boolean, Object |
int |
Double,Single |
float |
Currency |
money |
Date |
datetime |
4,000 文字以下の String |
varchar/nvarchar |
4,000 文字を超える String |
text/ntext |
8,000 バイト以下の 1 次元 Byte() 配列 |
varbinary |
8,000 バイトを超える 1 次元 Byte() 配列 |
image |
関連項目
参照
OLE オートメーション ストアド プロシージャ (Transact-SQL)