当前位置:文档之家› SQLServer数据类型转换

SQLServer数据类型转换

sql数据类型转换的使用
sql数据类型转换函cast()、convent()
不自动执行不同数据类型的表达式转换时,可使用转换函数cast和convent 进行转换。

这些转换函数还可用来获得各种特殊的数据格式。

这两个转换函数都可用于选择列表、WHERE 子句和允许使用表达式的任何地方。

如果希望Transact-SQL 程序代码遵从SQL-92 标准,请使用CAST 而不要使用CONVERT。

如果要利用CONVERT 中的样式功能,请使用CONVERT 而不要使用CAST。

使用CAST 或CONVERT 时,需要两条信息:
要转换的表达式(例如,销售报告要求销售数据从货币型数据转换为字符型数据)。

要将所给表达式转换到的数据类型,例如,varchar或SQL Server 提供的任何其它数据类型。

除非将被转换的值存储起来,否则转换仅在CAST 或CONVERT 函数的作用期内有效。

在下面的示例中,第一个SELECT 语句中使用CAST,第二个SELECT 语句中使用CONVERT,将title 列转换为char(50) 列,以使结果更可读:
USE pubs
SELECT CAST(title AS char(50)), ytd_sales
FROM titles
WHERE type = 'trad_cook'

USE pubs
SELECT CONVERT(char(50), title), ytd_sales
FROM titles
WHERE type = 'trad_cook'
下面是结果集:(对任何一个查询)
ytd_sales
----------------------------------------- -----------
Onions, Leeks, and Garlic: Cooking Secrets of the 375
Fifty Years in Buckingham Palace Kitchens 15096
Sushi, Anyone? 4095
(3 row(s) affected)
在下面的示例中,int类型的ytd_sales列转换为char(20) 列,从而可以对该列使用LIKE 谓词:
USE pubs
SELECT title, ytd_sales
FROM titles
WHERE CAST(ytd_sales AS char(20)) LIKE '15%'
AND type = 'trad_cook'
下面是结果集:
Title ytd_sales
----------------------------------------- ---------
Fifty Years in Buckingham Palace Kitchens 15096
(1 row(s) affected)
SQL Server 自动处理某些数据类型的转换。

例如,如果比较char 和datetime 表达式、smallint和int表达式、或不同长度的char 表达式,SQL Server 可将它们自动转换。

这种转换称为隐性转换。

对这些转换不必使用CAST 函数。

但是,在下列情况下使用CAST 都是可以接受的:
两个表达式的数据类型完全相同。

两个表达式可隐性转换。

必须显式转换数据类型。

如果试图进行不可能的转换(例如,将含有字母的char 表达式转换为int类型),SQL Server 将显示一条错误信息。

如果转换时没有指定数据类型的长度,则SQL Server 自动提供长度为30。

转换为datetime或smalldatetime时,SQL Server 将拒绝所有无法识别为日期的值(包括1753 年 1 月 1 日以前的日期)。

当日期处于适当的范围内(1900 年1 月1 日到2079 年6 月6 日)时,可将datetime值转换为smalldatetime。

时间值被四舍五入为最接近的分钟数。

转换为bit 将把任何非零值都更改为1。

转换为money 或smallmoney时,整数后将加上货币单位。

例如,整数值4 被转换为货币时相当于4 美元(对于默认语言us_english)。

浮点值的小数部分将四舍五入为四位小数以用于money 值。

将要转换为整数数据类型的char 或varchar数据类型的表达式中,只能包含数字和可选的加号或减号(+ 或-)。


忽略前导空格。

要转换为money 的char 或varchar数据类型的表达式,还可包含可选的小数点和前导美元符号($)。

要转换为float 或real 数据类型的char 或varchar类型表达式还可选择性地包含指数符号(e 或E,后面有可选的+ 或–符号,再后面是数字)。

将字符表达式转换为其它大小的数据类型时,对于新的数据类型过长的值将被截断,SQL Server 将在osql实用工具和SQL 查询分析器中显示星号(*)。

若数字表达式对于新的数据类型太长而无法显示,值将截断。

下面是字符截断的示例:
USE pubs
SELECT SUBSTRING(title, 1, 25) AS Title, CONVERT(char(2), ytd_sales)
FROM titles
WHERE type = 'trad_cook'
下面是结果集:
Title
------------------------- --
Onions, Leeks, and Garlic *
Fifty Years in Buckingham *
Sushi, Anyone? *
(3 row(s) affected)
在进行数据类型转换时,若目标数据类型的小数位数小于源数据类型的小数位数,则该值将被截断。

例如,CAST(10.3496 AS money) 的结果是$10.35。

可将text 数据显式转换为char 或varchar,将image 显式转换为binary 或varbinary。

由于这些数据类型被限制为8,000 个字符,所以转换也限制为character 和binary 数据类型的最大长度,即8,000 个字符。

可将ntext数据显式转换为nchar或nvarchar,但最大长度为4,000 个字符。

如果没有指定长度,被转换的值的默认长度为30 个字符。

不支持隐式转换。

style 参数
将datetime数据转换为char 或varchar数据时,CONVERT 的style 参数提供了各种日期显示格式。

为style 参数提供的数值确定了datetime数据的显示方式。

年份可以显示为两位或四位数。

默认情况下,SQL Server 将年份显示为两位数。

若要显示包括世纪的四位数年份(yyyy)(即使年份数据是使用两位数的年份格式存储的),请给style 值加100 以获得四位数年份。

以下示例显示用style 参数进行转换:
SELECT CONVERT(char(12), GETDATE(), 3)
此语句把当前日期转换为样式3,dd/mm/yy。

相关主题