sql数据类型转换(cast() and convent())函数)

sql数据类型转换(cast() and convent())函数)

sql数据类型转换(cast() and convent())函数)

当 Microsoft® SQL Server™ 2000 不自动执行不同数据类型的表达式转换时,可使用转换函数 CAST 和 CONVERT 进行转换。这些转换函数还可用来获得各种特殊的数据格式。这两个转换函数都可用于选择列表、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 自动处理某些数据类型的转换。例如,如果比较 chardatetime 表达式、smallintint 表达式、或不同长度的 char 表达式,SQL Server 可将它们自动转换。这种转换称为隐性转换。对这些转换不必使用 CAST 函数。但是,在下列情况下使用 CAST 都是可以接受的:

·    两个表达式的数据类型完全相同。

·    两个表达式可隐性转换。

·    必须显式转换数据类型。

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

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

转换为 datetimesmalldatetime 时,SQL Server 将拒绝所有无法识别为日期的值(包括 1753 年 1 月 1 日以前的日期)。当日期处于适当的范围内(1900 年 1 月 1 日到 2079 年 6 月 6 日)时,可将 datetime 值转换为 smalldatetime。时间值被四舍五入为最接近的分钟数。

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

转换为 moneysmallmoney 时,整数后将加上货币单位。例如,整数值 4 被转换为货币时相当于 4 美元(对于默认语言 us_english)。浮点值的小数部分将四舍五入为四位小数以用于 money 值。将要转换为整数数据类型的 charvarchar 数据类型的表达式中,只能包含数字和可选的加号或减号(+ 或 -)。将忽略前导空格。要转换为 moneycharvarchar 数据类型的表达式,还可包含可选的小数点和前导美元符号 ($)。

要转换为 floatreal 数据类型的 charvarchar 类型表达式还可选择性地包含指数符号(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 数据显式转换为 charvarchar,将 image 显式转换为 binaryvarbinary。由于这些数据类型被限制为 8,000 个字符,所以转换也限制为 characterbinary 数据类型的最大长度,即 8,000 个字符。可将 ntext 数据显式转换为 ncharnvarchar,但最大长度为 4,000 个字符。如果没有指定长度,被转换的值的默认长度为 30 个字符。不支持隐式转换。

style 参数

datetime 数据转换为 charvarchar 数据时,CONVERT 的 style 参数提供了各种日期显示格式。为 style 参数提供的数值确定了 datetime 数据的显示方式。年份可以显示为两位或四位数。默认情况下,SQL Server 将年份显示为两位数。若要显示包括世纪的四位数年份 (yyyy)(即使年份数据是使用两位数的年份格式存储的),请给 style 值加 100 以获得四位数年份。

以下示例显示用 style 参数进行转换:

SELECT CONVERT(char(12), GETDATE(), 3)

此语句把当前日期转换为样式 3,dd/mm/yy。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值