SQLServer数据类型转换

  • 格式:docx
  • 大小:20.98 KB
  • 文档页数:4

下载文档原格式

  / 7
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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)