データ型の変換 (データベース エンジン)Data type conversion (Database Engine)

適用対象: ○SQL Server (2008 以降) ○Azure SQL Database ○Azure SQL Data Warehouse ○Parallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

データ型は、以下のシナリオで変換される場合があります。Data types can be converted in the following scenarios:

  • あるオブジェクトのデータを他のオブジェクトのデータに移動、比較、または結合する場合は、あるオブジェクトのデータ型から他のオブジェクトのデータ型への変換が必要な場合があります。When data from one object is moved to, compared with, or combined with data from another object, the data may have to be converted from the data type of one object to the data type of the other.
  • Transact-SQLTransact-SQL 結果列、リターン コード、または出力パラメーターのデータをプログラム変数に移動する場合は、SQL ServerSQL Server のシステム データ型から変数のデータ型にデータを変換する必要があります。When data from a Transact-SQLTransact-SQL result column, return code, or output parameter is moved into a program variable, the data must be converted from the SQL ServerSQL Server system data type to the data type of the variable.

アプリケーション変数と SQL ServerSQL Server の結果セット列、リターン コード、パラメーター、またはパラメーター マーカーの間でデータ型を変換する場合、サポートされるデータ型変換はデータベース API によって決まります。When you convert between an application variable and a SQL ServerSQL Server result set column, return code, parameter, or parameter marker, the supported data type conversions are defined by the database API.

暗黙的な変換と明示的な変換Implicit and explicit conversion

データ型は、暗黙的または明示的に変換できます。Data types can be converted either implicitly or explicitly.

暗黙的な変換はユーザーが意識する必要はありません。Implicit conversions are not visible to the user. SQL ServerSQL Server がデータのデータ型を自動的に変換します。automatically converts the data from one data type to another. たとえば、smallint 型を int 型と比較する場合、比較を実行する前に、smallint 型から int 型に暗黙的に変換されます。For example, when a smallint is compared to an int, the smallint is implicitly converted to int before the comparison proceeds.

GETDATE() は、暗黙的に日付スタイル 0 に変換します。GETDATE() implicitly converts to date style 0. SYSDATETIME() は、暗黙的に日付スタイル 21 に変換します。SYSDATETIME() implicitly converts to date style 21.

明示的な変換では、CAST 関数または CONVERT 関数を使用します。Explicit conversions use the CAST or CONVERT functions.

CAST と CONVERT の各関数は、値 (ローカル変数、列、または他の式) のデータ型を変換します。The CAST and CONVERT functions convert a value (a local variable, a column, or another expression) from one data type to another. たとえば、次の CAST 関数は数値 $157.27 を文字列 '157.27' に変換します。For example, the following CAST function converts the numeric value of $157.27 into a character string of '157.27':

CAST ( $157.27 AS VARCHAR(10) )  

Transact-SQLTransact-SQL のプログラム コードを ISO に準拠させる場合は、CONVERT ではなく CAST を使います。Use CAST instead of CONVERT if you want Transact-SQLTransact-SQL program code to comply with ISO. CONVERT のスタイル機能を利用する場合は、CAST ではなく CONVERT を使用します。Use CONVERT instead of CAST to take advantage of the style functionality in CONVERT.

次の図は、SQL ServerSQL Server システムで提供されるデータ型に許可されている、すべての明示的および暗黙的なデータ型変換です。The following illustration shows all explicit and implicit data type conversions that are allowed for SQL ServerSQL Server system-supplied data types. xmlbigintsql_variant が含まれます。These include xml, bigint, and sql_variant. 代入時に sql_variant データ型からの暗黙的な変換は行われませんが、sql_variant への暗黙的な変換は行われます。There is no implicit conversion on assignment from the sql_variant data type, but there is implicit conversion to sql_variant.

データ型変換表Data type conversion table

データ型変換の動作Data type conversion behaviors

SQL ServerSQL Server オブジェクト間のデータ型の変換を行う場合、暗黙的または明示的なデータ型変換がサポートされない場合があります。Some implicit and explicit data type conversions are not supported when you are converting the data type of one SQL ServerSQL Server object to another. たとえば、nchar 型の値を image 型の値に変換することはできません。For example, an nchar value cannot be converted to an image value. nchar は明示的な変換によってのみ binary に変換できます。binary への暗黙的な変換はサポートされません。An nchar can only be converted to binary by using explicit conversion, an implicit conversion to binary is not supported. ただし、nchar は暗黙的、明示的のどちらでも nvarchar に変換できます。However, an nchar can be explicitly or implicitly converted to nvarchar.

次のトピックでは、対応するデータ型変換の動作について説明しています。The following topics describe the conversion behaviors exhibited by their corresponding data types:

OLE オートメーション ストアド プロシージャを使用したデータ型の変換Converting Data Types by Using OLE Automation Stored Procedures

SQL ServerSQL ServerTransact-SQLTransact-SQL のデータ型を使用し、OLE オートメーションは Visual BasicVisual Basic のデータ型を使用するため、OLE オートメーション ストアド プロシージャでは両方の間で渡されるデータの型を変換する必要があります。Because SQL ServerSQL Server uses Transact-SQLTransact-SQL data types and OLE Automation uses Visual BasicVisual Basic data types, the OLE Automation stored procedures must convert the data that passes between them.

次の表は、SQL ServerSQL Server データ型から Visual BasicVisual Basic データ型への変換を示します。The following table describes SQL ServerSQL Server to Visual BasicVisual Basic data type conversions.

SQL Server データ型SQL Server data type Visual Basic データ型Visual Basic data type
charvarchartextnvarcharntextchar, varchar, text, nvarchar, ntext StringString
decimalnumericdecimal, numeric StringString
bitbit ブール値Boolean
binaryvarbinaryimagebinary, varbinary, image 1 次元 Byte() 配列One-dimensional Byte() array
intint LongLong
smallintsmallint IntegerInteger
tinyinttinyint ByteByte
floatfloat DoubleDouble
realreal 単一Single
moneysmallmoneymoney, smallmoney CurrencyCurrency
datetimesmalldatetimedatetime, smalldatetime DateDate
上記以外は NULL に設定Anything set to NULL null 値に設定された VariantVariant set to Null

binaryvarbinaryimage の各型の値を除いて、1 つの SQL ServerSQL Server 値はすべて 1 つの Visual BasicVisual Basic 値に変換されます。All single SQL ServerSQL Server values are converted to a single Visual BasicVisual Basic value with the exception of binary, varbinary, and image values. これらの値は Visual BasicVisual Basic の 1 次元 Byte() 配列に変換されます。These values are converted to a one-dimensional Byte() array in Visual BasicVisual Basic. この配列の範囲は、Byte( 0 から length 1 ) です。length は、SQL ServerSQL Serverbinaryvarbinary、または image の値のバイト数です。This array has a range of Byte( 0 to length 1 ) where length is the number of bytes in the SQL ServerSQL Server binary, varbinary, or image values.

次の表は、Visual BasicVisual Basic データ型から SQL ServerSQL Server データ型への変換を示しています。These are the conversions from Visual BasicVisual Basic data types to SQL ServerSQL Server data types.

Visual Basic データ型Visual Basic data type SQL Server データ型SQL Server data type
LongIntegerByteBooleanObjectLong, Integer, Byte, Boolean, Object intint
DoubleSingleDouble, Single floatfloat
CurrencyCurrency moneymoney
DateDate datetimedatetime
4,000 文字以下の StringString with 4000 characters or less varchar/nvarcharvarchar/nvarchar
4,000 文字を超える StringString with more than 4000 characters text/ntexttext/ntext
8,000 バイト以下の 1 次元 Byte() 配列One-dimensional Byte() array with 8000 bytes or less varbinaryvarbinary
8,000 バイトを超える 1 次元 Byte() 配列One-dimensional Byte() array with more than 8000 bytes imageimage

参照See also

OLE オートメーション ストアド プロシージャ (Transact-SQL)OLE Automation Stored Procedures (Transact-SQL)
CAST および CONVERT (Transact-SQL)CAST and CONVERT (Transact-SQL)
データ型 (Transact-SQL)Data Types (Transact-SQL)
COLLATE (Transact-SQL)COLLATE (Transact-SQL)