SQL CAST 和 CONVERT
来源:互联网 发布:淘宝寄大便 编辑:程序博客网 时间:2024/04/24 05:24
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
CAST
和
CONVERT
将某种数据类型的表达式显式转换为另一种数据类型。
CAST
和
CONVERT
提供相似的功能。
语法
使用
CAST
:
CAST
( expression
AS
data_type )
使用
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)。
不带世纪数位 (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、9 或 109、13 或 113、20 或 120、21 或 121)始终返回世纪数位 (yyyy)。
** 当转换为 datetime 时输入;当转换为字符数据时输出。
*** 专门用于 XML。对于从 datetime 或 smalldatetime 到
character
数据的转换,输出格式如表中所示。对于从
float
、money 或 smallmoney 到
character
数据的转换,输出等同于 style 2。对于从
real
到
character
数据的转换,输出等同于 style 1。
重要 默认情况下,SQL Server 根据截止年份 2049 解释两位数字的年份。即,两位数字的年份 49 被解释为 2049,而两位数字的年份 50 被解释为 1950。许多客户端应用程序(例如那些基于 OLE 自动化对象的客户端应用程序)都使用 2030 作为截止年份。SQL Server 提供一个配置选项(
"两位数字的截止年份"
),借以更改 SQL Server 所使用的截止年份并对日期进行一致性处理。然而最安全的办法是指定四位数字年份。
当从 smalldatetime 转换为字符数据时,包含秒或毫秒的样式将在这些位置上显示零。当从 datetime 或 smalldatetime 值进行转换时,可以通过使用适当的
char
或
varchar
数据类型长度来截断不需要的日期部分。
下表显示了从
float
或
real
转换为字符数据时的 style 值。
值 输出
0(默认值) 最大为 6 位数。根据需要使用科学记数法。
1 始终为 8 位值。始终使用科学记数法。
2 始终为 16 位值。始终使用科学记数法。
在下表中,左列表示从 money 或 smallmoney 转换为字符数据时的 style 值。
值 输出
0(默认值) 小数点左侧每三位数字之间不以逗号分隔,小数点右侧取两位数,例如 4235.98。
1 小数点左侧每三位数字之间以逗号分隔,小数点右侧取两位数,例如 3,510.92。
2 小数点左侧每三位数字之间不以逗号分隔,小数点右侧取四位数,例如 4235.9819。
返回类型
返回与 data type 0 相同的值。
注释
隐性转换指那些没有指定
CAST
或
CONVERT
函数的转换。而显式转换指那些已指定了所需
CAST
(
CONVERT
) 函数的转换。下面的图表显示了所有可用于 SQL Server 系统提供的数据类型的显式和隐性转换,这些数据类型包括
bigint
和 sql_variant。
说明 因为 Unicode 数据始终使用偶数位字节,所以当在
binary
或 varbinary 数据类型与 Unicode 所支持的数据类型之间进行转换时会使用提示。例如,此转换不返回 41 的十六进制值,而是返回 4100 的十六进制值:
SELECT
CAST
(
CAST
(0x41
AS
nvarchar)
AS
varbinary)
不支持 text 和 image 数据类型的自动数据类型转换。可以将 text 数据显式转换为字符数据,将 image 数据显性转换为
binary
或 varbinary 数据,但是最大长度为 8000。如果尝试进行不正确的转换(例如,将包含字母的字符表达式转换为
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
(10.6496
AS
int
) 的结果为 10。
转换时,若目标数据类型的小数位数小于源数据类型的小数位数,则要转换的值将被四舍五入。例如,
CAST
(10.3496847
AS
money) 的结果是 $10.3497。
当将非数字类型的
char
、
nchar
、
varchar
或 nvarchar 数据转换为
int
、
float
、
numeric
或
decimal
时,SQL Server 将返回错误信息。当将空字符串 (
" "
) 转换为
numeric
或
decimal
时,SQL Server 也将返回错误信息。
使用二进制字符串数据
当
binary
或 varbinary 数据转换为字符数据并且在 x 后面指定了奇数位的值时,SQL Server 在 x 后面添加 0(零)以成为偶数位值。
二进制数据包含从 0 到 9 和从 A 到 F(或从 a 到 f)的字符,每两个字符为一组。二进制字符串必须以 0x 开头。例如,若要输入 FF,请键入 0xFF。最大值是一个 8000 字节的二进制值,每个字节的最大值都是 FF。
Binary
数据类型不能用于十六进制数据,而是用于位模式。对于存储为二进制数据的十六进制数字的转换和计算结果,无法保证其准确性。
当指定
binary
数据类型的长度时,每两个字符被算作是一个单位长度。长度 10 表示将输入 10 个双字符组。
由 0x 表示的空二进制字符串可以储存为二进制数据。
示例
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
0 0
- sql--CAST 和 CONVERT
- Sql CAST和CONVERT
- sql cast和convert
- SQL CAST 和 CONVERT
- sql convert 和 cast
- CAST 和 CONVERT (Transact-SQL)
- CAST 和 CONVERT (Transact-SQL)
- sql里的cast和convert
- sql里的cast和convert
- sql里的cast和convert
- SQL中CAST和CONVERT的区别
- sql类型转换函数cast和convert
- SQL转换函数(CAST 和 CONVERT)
- sql里的cast和convert
- CAST 和 CONVERT (SQL Server Compact)
- SQL中的cast和convert用法示例
- SQL中CAST和CONVERT的区别
- SQL 中Cast、Convert 和 Parse 区别
- 2014腾讯校园招聘实习技术类笔试题目
- 《Linux设备驱动开发详解》源码——globalfifo
- 程序员如何增加收入
- css中邮件布局问题
- 一步步写STM32 OS【四】OS基本框架
- SQL CAST 和 CONVERT
- Java反射的用途
- width,height的问题,span中line-height和padding区别
- [leetcode] Longest Substring Without Repeating Characters
- android.os.NetworkOnMainThreadException
- css中li标签之列表项标志显示
- Android调用Jni,非常简单的一个Demo
- openwrt针对RT5350代码下载,配置和编译
- 判断字符串中A出现的个数,及单词的个数