澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

函数使用,数据类型转换

一、概述

本篇文章转发来着官方网址在线文书档案,文章首要介绍SQL Server数据类型调换相关语法、隐式调换、Date样式等。

 

图片 1语法

Syntax for CAST:
CAST ( expression AS data_type [ ( length ) ] )

Syntax for CONVERT:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

参数

expression:任何有效的表明式。

data_type:目的数据类型。那包蕴 xmlbigintsql_variant。不可能采取小名数据类型。有关可用数据类型的详细消息,请参阅数据类型 (Transact-SQL)。

length:钦命指标数据类型长度的可选整数。暗许值为 30。

style:内定 CONVERT 函数如何退换 expression 的莫西干发型表达式。假若体制为 NULL,则赶回 NULL。该限量是由 data_type 鲜明的。有关详细音讯,请参阅“备注”部分。

1、数据类型转换:

  • (1)三种转移场地:
  • A:当多少个结实集以内的数额进行相比较或联和(union)的时候,固然多个结果集的数据类型差别一时候务必开始展览转换。
  • B:将Transact-SQL 得结果集重返给程序中的变量时,须将结果集的体系从SQL Server数据类型转变为变量的数据类型。
  • (2)二种转移方式:
  • A:自动进行的隐性调换(对于用户是不可知的)。 如:3个 smallint 变量和 int 变量相比时,将smallint 变量在可比前被隐性调换到 int 变量。
  • B:用户提供的显式调换(使用 CAST 或 CONVERT 函数进行显式转换)。

注意

A:指标数据类型不能够应用别名数据类型。 nchar、nvarchar、char、varchar、binary 或 varbinary

B:指标数据格式的体裁在下列项目间转移时才使得

(1)datetime 或 smalldatetime 数据转变到字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型)

(2)已知日子或时间格式的字符数据调换到 datetime 或 smalldatetime 数据,或是字符串格式

(3)用于将 float、real、money 或 smallmoney 数据转变到字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型)。

日常会用到,一贯没留底,前几日找了1段来,以供参考

 

将某种数据类型的表明式显式转变为另一种数据类型。CAST 和 CONVERT 提供相似的效用。

Date 和 Time 样式

壹旦 expression 为 date 或 time 数据类型,则 style 可感到下表中展现的值之一。其余值作为 0 举行管理。SQL Server 使用科威特算法来支撑阿拉伯体制的日子格式。

不带世纪数位 (yy) (1) 带世纪数位 (yyyy) 标准 输入/输出 (3)

-

0100 (1, 2)

默认

mon dd yyyy hh:miAM(或 PM)

1

101

美国

mm/dd/yyyy

2

102

ANSI

yy.mm.dd

3

103

英国/法国

dd/mm/yyyy

4

104

德国

dd.mm.yy

5

105

意大利

dd-mm-yy

6

106 (1)

-

dd mon yy

7

107 (1)

-

mon dd, yy

8

108

-

hh:mi:ss

-

9109 (1, 2)

默认设置 毫秒

mon dd yyyy hh:mi:ss:mmmAM(或 PM)

10

110

美国

mm-dd-yy

11

111

日本

yy/mm/dd

12

112

ISO

yymmdd

yyyymmdd

-

13113 (1, 2)

欧洲默认设置 毫秒

dd mon yyyy hh:mi:ss:mmm(24h)

14

114

-

hh:mi:ss:mmm(24h)

-

20120 (2)

ODBC 规范

yyyy-mm-dd hh:mi:ss(24h)

-

21121 (2)

ODBC 规范(带毫秒)

yyyy-mm-dd hh:mi:ss.mmm(24h)

-

126 (4)

ISO8601

yyyy-mm-ddThh:mi:ss.mmm(无空格)

-

127(6, 7)

带时区 Z 的 ISO8601。

yyyy-mm-ddThh:mi:ss.mmmZ

(无空格)

-

130 (1, 2)

回历 (5)

dd mon yyyy hh:mi:ss:mmmAM

-

131 (2)

回历 (5)

dd/mm/yy hh:mi:ss:mmmAM

一 这么些样式值将赶回不显明的结果。蕴含持有 (yy)(不带世纪数位)样式和局地 (yyyy)(带世纪数位)样式。

2 默认值(style 010091091311320120 以及 21121)始终再次来到世纪数位 (yyyy)。

3 转换为 datetime 时输入;调换为字符数据时输出。

4 为用于 XML 而设计。对于从 datetimesmalldatetime 到字符数据的改动,其出口格式如上贰个表所述。

5 回历是有各类变体的日历系统。SQL Server 使用科威特算法。

留神:暗中认可意况下,SQL Server 基于截至年份 204九年来注明两位数的年度。换言之,就是将两位数的年份 4玖 解释为 204九,将两位数的年份 50 解释为 一九四6。大多客户端应用程序(如基于自动化对象的应用程序)都利用达成年份 2030 年。SQL Server 提供了 two digit year cutoff 配置选项,可透过此选项改造 SQL Server 使用的截至年份,从而对日期举行一样管理。提出你钦赐二位数寒暑。

陆 仅援助从字符数据转变为 datetimesmalldatetime。仅表示日期或时刻成分的字符数据调换为 datetimesmalldatetime 数据类型时,未内定的小运成分设置为 00:00:00.000,未钦命的日子成分设置为 190四-0一-0一。

七选取可选的光阴区域提示符 (Z) 更有利将具备时区新闻的 XML datetime 值映射到没一时区的 SQL Server datetime 值。Z 是时区 UTC-0 的提醒符。别的时区则以 或 - 方向的 HH:MM 偏移量来提示。比方:2006-12-12T23:45:12-08:00

smalldatetime 转变为字符数据时,包罗秒或纳秒的样式将要那一个任务上海展览中心示零。使用相应的 charvarchar 数据类型长度从 datetimesmalldatetime 值调换时,可截断没有须求的日子部分。

从体制包罗时间的字符数据调换为 datetimeoffset 时,就要结果最终追加时区偏移量。

3、备注(来着MSDN.aspx))

 

初稿来自于: 

语法

使用 CAST:

CAST ( expression AS data_type )

使用 CONVERT:

CONVERT (data_type[(length)], expression [, style])

float 和 real 样式

如果 expression 为 floatreal,则 style 可感觉下表中展现的值之壹。别的值作为 0 举办拍卖。

输出

0(默认值)

最多包含 6 位。根据需要使用科学记数法。

1

始终为 8 位值。始终使用科学记数法。

2

始终为 16 位值。始终使用科学记数法。

126, 128, 129

为了保持向后兼容而包括在内,在以后的版本中可能不推荐使用。

(1)大值数据类型

大值数据类型表现出与小值数据类型同样的隐式和显式转变行为,特别是 varcharnvarcharvarbinary 数据类型。不过,应该怀想以下条件:

  • imagevarbinary(max) 的转换与反向转变是隐式转换,textvarchar(max)ntextnvarchar(max) 之间的调换也是隐式转变。
  • 从大值数据类型(如 varchar(max))到小值数据类型(如 varchar)的转变是隐式转变,但假设大值绝对于内定长度的小值数据类型显得太大,则发出截断。
  • varcharnvarcharvarbinary 到其对应的大值数据类型的转变都以隐式执行的。
  • sql_variant 数据类型到大值数据类型的转移是显式转换。
  • 大值数据类型无法转变为 sql_variant函数使用,数据类型转换。 数据类型。
  • ##### (2)xml 数据类型

    当您将 xml 数据类型显式或隐式转变为字符串或2进制数据类型时,xml 数据类型的内容将依靠一组规则实行系列化。

    (3)文本和图像数据类型

    不补助对 textimage 数据类型进行自动数据类型转换。可将 text 数据显式调换为字符数据,将 image 数据调换为 binary函数使用,数据类型转换。 或 varbinary,但最大尺寸是 8000字节。借使计划张开不得法的调换,如将富含字母的字符表明式转变为 int,则 SQL Server 将赶回错误新闻。

    ##### (4)输出的排序规则

    假若 CAST 或 CONVERT 的出口是字符串,并且输入也是字符串,则输出将与输入具有同等的排序规则和排序规则标签。纵然输入不是字符串,则输出选择数据库的暗中认可排序规则以及强制暗中同意的排序规则标签。请参阅排序规则优先级 (Transact-SQL).aspx)。

    若要为出口分配不一致的排序规则,请将 COLLATE 子句应用于 CAST 或 CONVERT 函数的结果表明式。举例:

    SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS

    ##### (5)截断结果和舍入结果

    将字符或二进制表明式(charncharnvarcharvarcharbinaryvarbinary)转换为别的数据类型的表明式时,可截断数据,仅展现部分数据,或回到错误(因为结果太短而不也许体现)。除了下表展现的更换,别的到 charvarcharncharnvarcharbinaryvarbinary 的转换都将被截断。

sql server两千中应用convert来博取datetime数据类型样式(全)

CAST 和 CONVERT
将某种数据类型的表达式显式转换为另壹种数据类型。CAST 和 CONVERT 提供相似的作用。

参数

expression

是此外有效的 Microsoft® SQL Server™ 表明式。

data_type

指标体系所提供的数据类型,包蕴 bigint 和 sql_variant。无法使用用户定义的数据类型

length

nchar、nvarchar、char、varchar、binary 或 varbinary 数据类型的可选参数。

style

日子格式样式,借以将 datetime 或 smalldatetime 数据转变为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型);或然字符串格式样式,借以将 float、real、money 或 smallmoney 数据调换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型)。

SQL Server 扶助使用科威特算法的阿拉伯体制中的数据格式。

在表中,左侧的两列表示将 datetime 或 smalldatetime 调换为字符数据的 style 值。给 style 值加 100,可得到包涵世纪数位的肆位年份 (yyyy)。

不带世纪数位 (yy) 带世纪数位 (yyyy)
标准

输入/输出**
- 0 或 100 (*) 默认值 mon dd yyyy hh:miAM(或 PM)
1 101 美国 mm/dd/yyyy
2 102 ANSI yy.mm.dd
3 103 英国/法国 dd/mm/yy
4 104 德国 dd.mm.yy
5 105 意大利 dd-mm-yy
6 106 - dd mon yy
7 107 - mon dd, yy
8 108 - hh:mm:ss
- 9 或 109 (*) 默认值 毫秒 mon dd yyyy hh:mi:ss:mmmAM(或 PM)
10 110 美国 mm-dd-yy
11 111 日本 yy/mm/dd
12 112 ISO yymmdd
- 13 或 113 (*) 欧洲默认值 毫秒 dd mon yyyy hh:mm:ss:mmm(24h)
14 114 - hh:mi:ss:mmm(24h)
- 20 或 120 (*) ODBC 规范 yyyy-mm-dd hh:mm:ss[.fff]
- 21 或 121 (*) ODBC 规范(带毫秒) yyyy-mm-dd hh:mm:ss[.fff]
- 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss:mmm(不含空格)
- 130* 科威特 dd mon yyyy hh:mi:ss:mmmAM
- 131* 科威特 dd/mm/yy hh:mi:ss:mmmAM

*    暗许值(style 0 或 100、玖 或 十玖、1三 或 1一叁、20 或 120、贰一 或 1二一)始终再次回到世纪数位 (yyyy)。
** 当调换为 datetime 时输入;当转变为字符数据时输出。
*** 特地用来 XML。对于从 datetime 或 smalldatetime 到 character 数据的转变,输出格式如表中所示。对于从 float、money 或 smallmoney 到 character 数据的转变,输出等同于 style 二。对于从 real 到 character 数据的改动,输出等同于 style 一。
示例:CONVERT(char(10), s.Season_PlanDate, 拾2) AS 安顿日期
Example:
1.Select Convert(Varchar(10), Cast('20070723' As DateTime), 120)
二.用Convert或Cast进行强制转换就好了
语法:
convert(要调换到的体系,被转移的列或表明式)
cast(被转移的列或表明式   AS   要转变来的等级次序)

money 和 smallmoney 样式

如果 expression 为 moneysmallmoney,则 style 可以为下表中显得的值之一。其余值作为 0 实行拍卖。

输出

0(默认值)

小数点左侧每三位数字之间不以逗号分隔,小数点右侧取两位数,例如 4235.98。

1

小数点左侧每三位数字之间以逗号分隔,小数点右侧取两位数,例如 3,510.92。

2

小数点左侧每三位数字之间不以逗号分隔,小数点右侧取四位数,例如 4235.9819。

126

转换为 char(n) 或 varchar(n) 时,等同于样式 2

日子数据格式的拍卖,三个示范:

语法
使用 CAST:

xml 样式

如果 data_type 为 xml,则 style 可以为下表中显得的值之一。其余值作为 0 进行管理。

输出

0(默认值)

使用默认的分析行为,即放弃无用的空格,且不允许使用内部 DTD 子集。

注意:

转换为 xml 数据类型时,SQL Server 的无用空格处理方式不同于 XML 1.0。有关详细信息,请参阅生成 XML 实例。

1

保留无用空格。此样式设置将默认的 xml:space 处理方式设置为与指定了 xml:space="preserve" 的行为相同。

2

启用有限的内部 DTD 子集处理。

如果启用,则服务器可使用内部 DTD 子集提供的以下信息来执行非验证分析操作。

应用属性的默认值。

解析并扩展内部实体引用。

检查 DTD 内容模型以实现语法的正确性。

分析器将忽略外部 DTD 子集。此外,不评估 XML 声明来查看 standalone 属性是设置为 yes 还是 no,而是将 XML 实例当成一个独立文档进行分析。

3

保留无用空格,并启用有限的内部 DTD 子集处理。

CONVERT(varchar(16), 时间一, 20) 结果:2007-02-01  08:02/*光阴一般为getdate()函数或数额表里的字段*/

CAST ( expression AS data_type )

2进制样式

如果 expression 为 binary(n)varbinary(n)char(n)varchar(n),则 style 可以为下表中显得的值之壹。表中未有列出的样式值将回到错误。

输出

0(默认值)

将 ASCII 字符转换为二进制字节,或者将二进制字节转换为 ASCII 字符。每个字符或字节按照 1:1 进行转换。

如果 data_type 为二进制类型,则会在结果左侧添加字符 0x。

1, 2

如果 data_type 为二进制类型,则表达式必须为字符表达式。expression 必须由数量为偶数的十六进制数字(0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F、a、b、c、d、e、f)组成。如果将 style 设置为 1,字符 0x 必须为表达式中的前两个字符。如果表达式中包含的字符数为奇数或者包含任何无效的字符,则会引发错误。

如果转换后的表达式长度大于 data_type 长度,则会在右侧截断结果。

如果固定长度 data_types 大于转换后的结果,则会在结果右侧添加零。

如果 data_type 为字符类型,则表达式必须为二进制表达式。每个二进制字符均转换为两个十六进制字符。如果转换后的表达式长度大于 data_type 长度,则会在右侧截断结果。

如果 data_type 为固定大小的字符类型,并且转换后的结果长度小于其 data_type 长度,则会在转换后的表达式右侧添加空格,以使十六进制数字的个数保持为偶数。

对于 style 1,将在转换后的结果左侧添加字符 0x。

CONVERT(varchar(10), 时间一, 23) 结果:2007-02-01  /*varchar(10)表示日期输出的格式,若是十分的短会产生截取*/

使用 CONVERT:

隐式转变

隐式调换指那么些尚未点名 CAST 或 CONVERT 函数的转换。显式转变指那个急需钦赐 CAST 或 CONVERT 函数的更动。以下图例突显了可对 SQL Server 系统提供的数据类型实行的具备显式和隐式数据类型转变。当中包含 xmlbigintsql_variant。不设有对 sql_variant 数据类型的赋值举办的隐式转变,可是存在转换为 sql_variant 的隐式调换。

图片 2

datetimeoffset 与字符类型 charvarcharncharnvarchar 之间转移时,转变后的时区偏移量部分的 HH 和 MM 都应始终为四个数字,比如 -08:00。

留意:因为 Unicode 数据始终使用偶数个字节,所以在 binaryvarbinary 与支持Unicode 的数据类型之间展开转移时会使用警告。比如,以下转变不回来十陆进制值 4一;而是重回四十0:SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary)

言语及查询结果:

CONVERT (data_type[(length)], expression [, style])

大值数据类型

大值数据类型表现出与小值数据类型同样的隐式和显式调换行为,极其是 varcharnvarcharvarbinary 数据类型。然则,应该思考以下规则:

  • imagevarbinary(max) 的退换与反向调换是隐式调换,textvarchar(max)ntextnvarchar(max) 之间的转换也是隐式转变。

  • 从大值数据类型(如 varchar(max))到小值数据类型(如 varchar)的转换是隐式转变,但假若大值相对于钦命长度的小值数据类型显得太大,则发出截断。

  • varcharnvarcharvarbinary 到其对应的大值数据类型的调换都以隐式推行的。

  • sql_variant 数据类型到大值数据类型的转移是显式调换。

  • 大值数据类型不可能转变为 sql_variant 数据类型。

关于怎样改动 Microsoft .NET Framework 公共语言运营时 (CLXC60) 用户定义类型的音讯,请参阅对用户定义类型实施操作。有关怎么样从 xml 数据类型进行转换的详细音讯。

Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM
Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06
Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16
Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06
Select CONVERT(varchar(100), GETDATE(), 4): 16.05.06
Select CONVERT(varchar(100), GETDATE(), 5): 16-05-06
Select CONVERT(varchar(100), GETDATE(), 6): 16 05 06
Select CONVERT(varchar(100), GETDATE(), 7): 05 16, 06
Select CONVERT(varchar(100), GETDATE(), 8): 10:57:46
Select CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM
Select CONVERT(varchar(100), GETDATE(), 10): 05-16-06
Select CONVERT(varchar(100), GETDATE(), 11): 06/05/16
Select CONVERT(varchar(100), GETDATE(), 12): 060516
Select CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937
Select CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967
Select CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47
Select CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157
Select CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM
Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16
Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47
Select CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250
Select CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AM
Select CONVERT(varchar(100), GETDATE(), 101): 05/16/2006
Select CONVERT(varchar(100), GETDATE(), 102): 2006.05.16
Select CONVERT(varchar(100), GETDATE(), 103): 16/05/2006
Select CONVERT(varchar(100), GETDATE(), 104): 16.05.2006
Select CONVERT(varchar(100), GETDATE(), 105): 16-05-2006
Select CONVERT(varchar(100), GETDATE(), 106): 16 05 2006
Select CONVERT(varchar(100), GETDATE(), 107): 05 16, 2006
Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49
Select CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AM
Select CONVERT(varchar(100), GETDATE(), 110): 05-16-2006
Select CONVERT(varchar(100), GETDATE(), 111): 2006/05/16
Select CONVERT(varchar(100), GETDATE(), 112): 20060516
Select CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513
Select CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547
Select CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49
Select CONVERT(varchar(100), GETDATE(), 121): 2006-05-16 10:57:49.700
Select CONVERT(varchar(100), GETDATE(), 126): 2006-05-16T10:57:49.827
Select CONVERT(varchar(100), GETDATE(), 130): 18 ???? ?????? 1427 10:57:49:907AM
Select CONVERT(varchar(100), GETDATE(), 131): 18/04/1427 10:57:49:920AM

参数
expression

xml 数据类型

当您将 xml 数据类型显式或隐式调换为字符串或二进制数据类型时,xml 数据类型的内容将依附一组规则实行种类化。有关这几个规则的新闻,请参阅 XML 数据的类别化。有关如何从 XML 转变为 CLRubicon用户定义类型的音信,请参阅对用户定义类型施行操作。有关怎么着从任何数据类型转产生 xml 数据类型的新闻。

 

是别的有效的 Microsoft® SQL Server™ 表明式。有关越多新闻,请参见表达式。

文件和图像数据类型

不援救对 textimage 数据类型进行自动数据类型转换。可将 text 数据显式调换为字符数据,将 image 数据调换为 binaryvarbinary,但最大尺寸是 九千字节。要是准备拓展不科学的改动,如将包蕴字母的字符表明式调换为 int,则 SQL Server 将赶回错误消息。

说明: 使用 CONVERT:
CONVERT ( data_type [ ( length )  ] , expression [ , style ] )
参数 expression
是其余有效的 Microsoft®  SQL Server™ 表明式。。
data_type
目的体系所提供的数据类型,包含 bigint 和  sql_variant。无法利用用户定义的数据类型。 length
nchar、nvarchar、char、varchar、binary 或  varbinary 数据类型的可选参数。
style
日子格式样式,借以将 datetime 或 smalldatetime  数据调换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型);或许字符串格式样式,借以将  float、real、money 或 smallmoney 数据转变为字符数据(nchar、nvarchar、char、varchar、nchar 或  nvarchar 数据类型)。
SQL Server 帮衬使用科威特算法的阿拉伯体制中的数据格式。
在表中,左边的两列表示将  datetime 或 smalldatetime 调换为字符数据的 style 值。给 style 值加 100,可获得包涵世纪数位的四个人年份  (yyyy)。

data_type

输出排序规则

若是 CAST 或 CONVERT 的出口是字符串,并且输入也是字符串,则输出将与输入具备同等的排序规则和排序规则标签。若是输入不是字符串,则输出选择数据库的私下认可排序规则以及强制暗中同意的排序规则标签。

若要为出口分配分裂的排序规则,请将 COLLATE 子句应用于 CAST 或 CONVERT 函数的结果表明式。比如:

SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS

重要:

指标种类所提供的数据类型,包蕴 bigint 和 sql_variant。无法使用用户定义的数据类型。有关可用的数据类型的更加多消息,请参见数据类型。

截断结果和舍入结果

将字符或二进制表明式(charncharnvarcharvarcharbinaryvarbinary)转变为其它数据类型的表明式时,可截断数据,仅突显部分数据,或回到错误(因为结果太短而1筹莫展呈现)。除了下表突显的更动,其余到 charvarcharncharnvarcharbinaryvarbinary 的转换都将被截断。

暗中认可情形下,SQL Server 依照停止年份 204玖解释两位数字的年份。即,两位数字的年份  4玖 被演说为 204玖,而两位数字的年份 50 被分解为 一九四七。多数客户端应用程序(比如那多个基于 OLE 自动化对象的客户端应用程序)都选用 2030  作为达成年份。SQL Server 提供3个安插选项("两位数字的收尾年份"),借以改换 SQL Server  所利用的利落年份并对日期进行一致性管理。然则最安全的点子是钦赐三人数字年份。

length

 

被转换的数据类型 转换为的数据类型 结果

intsmallinttinyint

char

*

 

varchar

*

 

nchar

E

 

nvarchar

E

moneysmallmoneynumericdecimalfloatreal

char

E

 

varchar

E

 

nchar

E

 

nvarchar

E

* = 结果长度太短而望尘莫及出示。E = 因为结果长度太短不可能体现而回到错误。

SQL Server 仅保险往返转变(即从原本数据类型举办改换后又回到原始数据类型的转变)在各版本间爆发一样值。以下示例展现的就是那样的往来转变:

DECLARE @myval decimal (5, 2)
SET @myval = 193.57
SELECT CAST(CAST(@myval AS varbinary(20)) AS decimal(10,5))
-- Or, using CONVERT
SELECT CONVERT(decimal(10,5), CONVERT(varbinary(20), @myval))

留神:不要品味构造 binary 值然后将其转移为数值数据类型类其余一种数据类型。SQL Server 不能够保险 decimalnumeric 数据类型到 binary 的转变结果在 SQL Server 的相继版本中都同壹。

改动小数位数分化的数据类型时,结果值有的时候被截断,一时被舍入。下表显示了此作为。

被转换的数据类型 转换到的数据类型 行为

numeric

numeric

舍入

numeric

int

截断

numeric

money

舍入

money

int

舍入

money

numeric

舍入

float

int

截断

float

numeric

舍入

float

datetime

舍入

datetime

int

舍入

举个例子说,以下转变的结果为 10

SELECT CAST(10.6496 AS int)

在拓展数据类型转变时,若目的数据类型的小数位数小于源数据类型的小数位数,则该值将被截断。举例,以下转变的结果为 $10.3497

SELECT CAST(10.3496847 AS money)

当非数字型 charncharvarcharnvarchar 数据转换为 intfloatnumericdecimal 时,SQL Server 将重回错误音信。当空字符串 (" ") 调换为 numericdecimal 时,SQL Server 也回到错误。

 

 

备注:文章转发来源于官方在线文书档案。

 

 

备注:

    作者:pursuer.chen

    博客:http://www.cnblogs.com/chenmh

本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接,否则保留追究责任的权利。

《欢迎交流讨论》

 

当从 smalldatetime  调换为字符数据时,蕴含秒或微秒的体裁将要那么些岗位上显示零。当从 datetime 或 smalldatetime 值举办转移时,可以透过利用合适的 char 或  varchar 数据类型长度来截断没有须要的日子部分。

nchar、nvarchar、char、varchar、binary 或 varbinary 数据类型的可选参数。

style

日期格式样式,借以将 datetime 或 smalldatetime 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型);或然字符串格式样式,借以将 float、real、money 或 smallmoney 数据转变为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型)。

SQL Server 补助选择科威特算法的阿拉伯样式中的数据格式。

在表中,左侧的两列表示将 datetime 或 smalldatetime 转换为字符数据的 style 值。给 style 值加 拾0,可获得蕴涵世纪数位的几个人年份 (yyyy)。

不带世纪数位 (yy) 带世纪数位 (yyyy)
标准
输入/输出**

  • 0 或 100 (*) 默认值 mon dd yyyy hh:miAM(或 PM)
    1 101 美国 mm/dd/yyyy
    2 102 ANSI yy.mm.dd
    3 103 英国/法国 dd/mm/yy
    4 104 德国 dd.mm.yy
    5 105 意大利 dd-mm-yy
    6 106 - dd mon yy
    7 107 - mon dd, yy
    8 108 - hh:mm:ss
  • 9 或 109 (*) 默认值 毫秒 mon dd yyyy hh:mi:ss:mmmAM(或 PM)
    10 110 美国 mm-dd-yy
    11 111 日本 yy/mm/dd
    12 112 ISO yymmdd
  • 13 或 113 (*) 亚洲暗许值 飞秒 dd mon yyyy hh:mm:ss:mmm(二肆h)
    14 114 - hh:mi:ss:mmm(24h)
  • 20 或 120 (*) ODBC 规范 yyyy-mm-dd hh:mm:ss[.fff]
  • 21 或 121 (*) ODBC 规范(带毫秒) yyyy-mm-dd hh:mm:ss[.fff]
  • 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss:mmm(不含空格)
  • 130* 科威特 dd mon yyyy hh:mi:ss:mmmAM
  • 131* 科威特 dd/mm/yy hh:mi:ss:mmmAM

* 私下认可值(style 0 或 十0、玖 或 10九、1三 或 1一3、20 或 120、贰壹 或 1二一)始终重临世纪数位 (yyyy)。
** 当调换为 datetime 时输入;当调换为字符数据时输出。
*** 特地用来 XML。对于从 datetime 或 smalldatetime 到 character 数据的转移,输出格式如表中所示。对于从 float、money 或 smallmoney 到 character 数据的转换,输出等同于 style 二。对于从 real 到 character 数据的转移,输出等同于 style 一。

 

第3 私下认可景况下,SQL Server 依据截止年份 204玖解释两位数字的年份。即,两位数字的年份 4玖 被解释为 204玖,而两位数字的年份 50 被分解为 19四8。大多客户端应用程序(举个例子那么些基于 OLE 自动化对象的客户端应用程序)都使用 2030 作为完毕年份。SQL Server 提供三个安顿选项("两位数字的终结年份"),借以更动 SQL Server 所使用的了断年份并对日期实行1致性管理。然则最安全的章程是钦点4人数字年份。

当从 smalldatetime 转变为字符数据时,包涵秒或纳秒的样式将要那个职分上显得零。当从 datetime 或 smalldatetime 值进行转移时,能够经过应用特出的 char 或 varchar 数据类型长度来截断无需的日子部分。

下表展现了从 float 或 real 调换为字符数据时的 style 值。

值 输出
0(默许值) 最大为 陆 位数。遵照需求利用科学记数法。
1 一贯为 八 位值。始终使用科学记数法。
2 始终为 1陆 位值。始终使用科学记数法。

在下表中,左列表示从 money 或 smallmoney 转变为字符数据时的 style 值。

值 输出
0(私下认可值) 小数点右边每三个人数字之间不以逗号分隔,小数点右边取两位数,譬喻4235.玖八。
1 小数点左边每几个人数字之间以逗号分隔,小数点左侧取两位数,比如3,510.玖贰。
二 小数点左边每4位数字之间不以逗号分隔,小数点右边取几人数,比方423伍.981玖。

回去类型
归来与 data type 0 一样的值。

注释
隐性调换指那一个并未有一点名 CAST 或 CONVERT 函数的转移。而显式转变指那么些已钦定了所需 CAST (CONVERT) 函数的转变。上面包车型大巴图纸显示了具备可用于 SQL Server 系统提供的数据类型的显式和隐性转换,那几个数据类型包罗 bigint 和 sql_variant。

 

 

表明 因为 Unicode 数据始终使用偶数位字节,所以当在 binary 或 varbinary 数据类型与 Unicode 所支撑的数据类型之间开始展览转移时会使用提示。举个例子,此调换不回去 41的十陆进制值,而是回到 4100 的十陆进制值:SELECT CAST(CAST(0x四一 AS nvarchar) AS varbinary)

不接济 text 和 image 数据类型的自动数据类型转换。能够将 text 数据显式转换为字符数据,将 image 数据显性调换为 binary 或 varbinary 数据,不过最大尺寸为 玖仟。假诺尝试进行不科学的转变(举例,将涵盖字母的字符表明式转变为 int),则 SQL Server 会产生错误消息。

当 CAST 或 CONVERT 的出口是字符串并且输入也是字符串时,输出与输入具有同样的排序规则和排序规则标签。假如输入不是字符串,则输出采纳数据库的私下认可排序规则及强制私下认可的排序规则标签。有关更加多消息,请参见排序规则的预先顺序。

若要给输出指派差异的排序规则,请将 COLLATE 子句应用到 CAST 或 CONVERT 函数的结果表明式中。比方:

SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS

不设有有关赋值的从 sql_variant 数据类型进行的隐性转变,然而存在调换为 sql_variant 的隐性调换。

将字符或二进制表明式(char、nchar、nvarchar、varchar、binary 或 varbinary)调换为分歧数据类型的表明式时,数据大概会被截断,只展现壹部分,恐怕因为结果太短不可能彰显而回到错误。除下表中所展现的转变外,调换为 char、varchar、nchar、nvarchar、binary 和 varbinary 时将被截断。

被转变的数据类型 调换为的数据类型 结果
int、smallint 或 tinyint char *
varchar *
nchar E
nvarchar E
money、smallmoney、numeric、decimal、float 或 real char E
varchar E
nchar E
nvarchar E

* 结果长度太短而无法彰显。
E 因为结果长度太短不或许出示而回到错误。

Microsoft SQL Server 仅保障往返转换(即,从原有数据类型举办转换后又赶回原始数据类型)在各版本间发生一样值。下边的言传身教显示往返调换:

DECLARE @myval decimal (5, 2)
SET @myval = 193.57
SELECT CAST(CAST(@myval AS varbinary(20)) AS decimal(10,5))
-- Or, using CONVERT
SELECT CONVERT(decimal(10,5), CONVERT(varbinary(20), @myval))

举例说,不要尝试构造 binary 值并将它们调换为数字数据类型分类的数据类型。SQL Server 并不保证 decimal 或 numeric 数据类型调换为 binary 的结果在 SQL Server 各版本间同样。

上面包车型地铁言传身教显示了是因为太短而无法体现的结果表明式。

USE pubs
SELECT SUBSTRING(title, 1, 25) AS Title, CAST(ytd_sales AS char(2))
FROM titles
WHERE type = 'trad_cook'

上边是结果集:

Title


Onions, Leeks, and Garlic *
Fifty Years in Buckingham *
Sushi, Anyone? *

(3 row(s) affected)

当有着分歧小数位数的数据类型进行退换时,值将被截断为最标准的数位。举个例子,SELECT CAST(⑩.64玖陆 AS int) 的结果为 十。

改变时,若指标数据类型的小数位数小于源数据类型的小数位数,则要转移的值将被肆舍5入。举个例子,CAST(10.3496847AS money) 的结果是 $拾.3497。

当将非数字类型的 char、nchar、varchar 或 nvarchar 数据调换为 int、float、numeric 或 decimal 时,SQL Server 将再次来到错误新闻。当将空字符串 (" ") 转换为 numeric 或 decimal 时,SQL Server 也将回到错误音讯。

采取2进制字符串数据
当 binary 或 varbinary 数据转变为字符数据同不平时间在 x 后边内定了奇数位的值时,SQL Server 在 x 前面增多 0(零)以成为偶数位值。

2进制数据蕴涵从 0 到 玖 和从 A 到 F(或从 a 到 f)的字符,每五个字符为壹组。贰进制字符串必须以 0x 起初。举个例子,若要输入 FF,请键入 0xFF。最大值是二个 柒仟 字节的2进制值,每一个字节的最大值都是FF。Binary 数据类型无法用来十陆进制数据,而是用于位格局。对于仓库储存为二进制数据的十六进制数字的转移和测算结果,不能够保障其正确性。

当钦命 binary 数据类型的长度时,每四个字符被当成是多少个单位长度。长度 10表示将输入 10 个双字符组。

由 0x 表示的空2进制字符串能够储存为2进制数据。

示例
A. 同一时间采纳 CAST 和 CONVERT
各种示例都将追寻书名(那么些书籍的达成当前出售额的第二人数字为 3),并将那个图书的 ytd_sales 转换为 char(20)。

-- Use CAST.
USE pubs
GO
SELECT SUBSTRING(title, 1, 30) AS Title, ytd_sales
FROM titles
WHERE CAST(ytd_sales AS char(20)) LIKE '3%'
GO

-- Use CONVERT.
USE pubs
GO
SELECT SUBSTRING(title, 1, 30) AS Title, ytd_sales
FROM titles
WHERE CONVERT(char(20), ytd_sales) LIKE '3%'
GO

上面是任壹查询的结果集:

Title ytd_sales


Cooking with Computers: Surrep 3876
Computer Phobic AND Non-Phobic 375
Emotional Security: A New Algo 3336
Onions, Leeks, and Garlic: Coo 375

(4 row(s) affected)

B. 使用带有算术运算符的 CAST
上边包车型大巴言传身教通过将总的截至当前出卖额 (ytd_sales) 与每本图书的标价 (price) 相除,实行独立列总计(Copies)。在肆舍五入到最附近的大背头后,此结果将更动为 int 数据类型。

USE pubs
GO
SELECT CAST(ROUND(ytd_sales/price, 0) AS int) AS 'Copies'
FROM titles
GO

上面是结果集:

Copies

205
324
6262
205
102
7440
NULL
383
205
NULL
17
187
16
204
418
18
1263
273

(18 row(s) affected)

C. 使用 CAST 进行串联
上边包车型客车言传身教使用 CAST 数据类型调换函数来串联非字符、非二进制表明式。

USE pubs
GO
SELECT 'The price is ' CAST(price AS varchar(12))
FROM titles
WHERE price > 10.00
GO

上面是结果集:


The price is 19.99
The price is 11.95
The price is 19.99
The price is 19.99
The price is 22.95
The price is 20.00
The price is 21.59
The price is 10.95
The price is 19.99
The price is 20.95
The price is 11.95
The price is 14.99

(12 row(s) affected)

D. 使用 CAST 得到更多易读文件
上面包车型大巴身体力行在挑选列表中动用 CAST 将 title 列调换为 char(50) 列,那样结果将特别易读。

USE pubs
GO
SELECT CAST(title AS char(50)), ytd_sales
FROM titles
WHERE type = 'trad_cook'
GO

上边是结果集:

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)

E. 使用带有 LIKE 子句的 CAST
下边包车型客车示范将 int 列(ytd_sales 列)调换为 char(20) 列,以便利用 LIKE 子句。

USE pubs
GO
SELECT title, ytd_sales
FROM titles
WHERE CAST(ytd_sales AS char(20)) LIKE '15%'
AND type = 'trad_cook'
GO

上面是结果集:

title ytd_sales


Fifty Years in Buckingham Palace Kitchens 15096

本文由澳门新浦京娱乐场网站发布于数据库,转载请注明出处:函数使用,数据类型转换