データ型の変換 (データベース エンジン)

データ型は、以下のシナリオで変換される場合があります。

  • あるオブジェクトのデータを他のオブジェクトのデータに移動、比較、または結合する場合は、あるオブジェクトのデータ型から他のオブジェクトのデータ型への変換が必要な場合があります。

  • 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 型の値に変換できます。

次のトピックでは、以下の対応するデータ型変換の動作について説明します。

binary と varbinary (Transact-SQL)

datetime2 (Transact-SQL)

money および smallmoney (Transact-SQL)

bit (Transact-SQL)

datetimeoffset (Transact-SQL)

smalldatetime (Transact-SQL)

char および varchar (Transact-SQL)

decimal 型と numeric 型 (Transact-SQL)

sql_variant (Transact-SQL)

date (Transact-SQL)

float 型と real 型 (Transact-SQL)

time (Transact-SQL)

datetime (Transact-SQL)

int、bigint、smallint、および tinyint (Transact-SQL)

uniqueidentifier (Transact-SQL)

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)

CAST および CONVERT (Transact-SQL)

データ型 (Transact-SQL)

COLLATE (Transact-SQL)