数据类型转换(数据库引擎)

在以下情况下,可以转换数据类型:

  • 当一个对象的数据移到另一个对象,或两个对象之间的数据进行比较或组合时,数据可能必须从一个对象的数据类型转换为另一个对象的数据类型。

  • 将 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 标准,请使用 CAST 而不要使用 CONVERT。 如果要利用 CONVERT 中的样式功能,请使用 CONVERT 而不要使用 CAST。

以下图例显示了可对 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

一维 Byte() 数组

int

Long

smallint

Integer

tinyint

Byte

float

Double

real

Single

money、smallmoney

Currency

datetime、smalldatetime

Date

设置为 NULL 的任何类型

设置为 Null 的 Variant

除了 binary、varbinary 和 image 值以外,所有单个 SQL Server 值都被转换为单个 Visual Basic 值。 这些值将被转换为 Visual Basic 中的一维 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

小于或等于 4000 个字符的 String

varchar/nvarchar

大于 4000 个字符的 String

text/ntext

小于或等于 8000 字节的一维 Byte() 数组

varbinary

大于 8000 字节的一维 Byte() 数组

image

请参阅

参考

OLE 自动存储过程 (Transact-SQL)

CAST 和 CONVERT (Transact-SQL)

数据类型 (Transact-SQL)

COLLATE (Transact-SQL)