>

[转]SQL Server 中 Cast 与 Convert

- 编辑:乐百家599手机首页 -

[转]SQL Server 中 Cast 与 Convert

目录

3.2.使用“;”

利用“;”作为 Transact-SQL 语句终止符。即使分号不是必备的,但利用它是一种好的习于旧贯。

示例:

USE AdventureWorks;

GO

DECLARE @find varchar(30);

SET @find = 'Man%';

SELECT LastName, FirstName, Phone

FROM Person.Contact

WHERE LastName LIKE @find;

1.2. 中坚标准
建议采纳帕斯Carl样式或Camel样式命名数据库对象。
大写T-SQL语言的装有入眼字,谓词和种类函数。

G. 对日期时间数额利用 CAST 和 CONVERT

以下示例显示了脚下日期和时间,并选用 CAST 将眼明天子和时间改为字符数据类型,然后采取 CONVERTISO 8901 格式展现日期和岁月。

 

复制代码

SELECT 
   GETDATE() AS UnconvertedDateTime,
   CAST(GETDATE() AS nvarchar(30)) AS UsingCast,
   CONVERT(nvarchar(30), GETDATE(), 126) AS UsingConvertTo_ISO8601  ;
GO

上边是结果集:

UnconvertedDateTime UsingCast UsingConvertTo_ISO8601



2006-04-18 09:58:04.570 Apr 18 2006 9:58AM 2006-04-18T09:58:04.570

 

(1 row(s) affected)

以下示例大约与上述示范相反。该示例将日期和时间显示为字符数据,并选用 CAST 将字符数据改为 datetime 数据类型,然后利用 CONVERT 将字符数据改为 datetime 数据类型。

 

复制代码

SELECT 
   '2006-04-25T15:50:59.997' AS UnconvertedText,
   CAST('2006-04-25T15:50:59.997' AS datetime) AS UsingCast,
   CONVERT(datetime, '2006-04-25T15:50:59.997', 126) AS UsingConvertFrom_ISO8601 ;
GO

上边是结果集:

UnconvertedText UsingCast UsingConvertFrom_ISO8601


2006-04-25T15:50:59.997 2006-04-25 15:50:59.997 2006-04-25 15:50:59.997

 

(1 row(s) affected)

2.2.赋值运算符

即等号(=),将表明式的值赋予另叁个变量。举三个轻易的事例。
示例2:计算Student表中学生的平均入学战表并打字与印刷。
Student表的多少如图所示,stu_enter_score列贮存了学生的入学成绩
图片 1
进行上面包车型客车言语

DECLARE @average int--声明@average变量
SET @average=(--将计算出的平均值赋值给@average
SELECT AVG(stu_enter_score)
FROM Student)
PRINT @average--打印@average的值

结果如图所示
图片 2

4.1.代码头顶注释

在SQL代码块(sql文件或存款和储蓄进程)的底部进行申明,标注成立人(Author)、创始日期(Create date)、修改消息(Modify [n])。

格式:

5.3. 匈牙利(Hungary)命名法
匈牙利(Magyarország)命名法由匈牙利(Magyarország)技术员发明,他在微软办事了多年,此命名法正是因而微软的各类产品和文书档案传出来。大多有经验的程序猿,不管他们用的是哪门语言,都或多或少在使用它。

B. 使用含有算术运算符的 CAST

以下示例将后一年度结束到未来的满贯发售额 (SalesYTD) 除以报酬百分比 (CommissionPCT),进而得出单列总括结果 (Computed)。在舍入到最接近的莫西干发型后,将此结果转变为 int 数据类型。

 

复制代码

USE AdventureWorks2008R2;
GO
SELECT CAST(ROUND(SalesYTD/CommissionPCT, 0) AS int) AS 'Computed'
FROM Sales.SalesPerson 
WHERE CommissionPCT != 0;
GO

下边是结果集:

Computed


379753754

346698349

257144242

176493899

281101272

0

301872549

212623750

298948202

250784119

239246890

101664220

124511336

97688107

 

(14 row(s) affected)

4.1.数据类型调换函数

暗中同意情形下SQL Server会对一些数据类型举办机动调换,这种转移称为隐式转变。碰着不能自动调换,则要求用CAST()函数和CONVERT()函数调换,这种转移称为显式转变。CAST()函数和CONVERT()函数的职能是一样的,CAST函数更便于接纳,CONVERT函数的长处是能够内定日期和数值格式。
示例16:将Student表中的学号调换为日期格式
上面两句语句的作用是一样的,实行下列语句

SELECT stu_name,CAST(stu_no AS DATE) AS 学号转换成日期,stu_enter_score,stu_birthday FROM Student
SELECT stu_name,CONVERT(DATE,stu_no) AS 学号转换成日期,stu_enter_score,stu_birthday FROM Student

结果如图所示
图片 3
示例17:用CONVERT()函数将stu_birthday转化成钦命格式的日子
实践下列语句

SELECT stu_name,CONVERT(VARCHAR(20),stu_birthday,101) FROM Student
--CONVERT函数将DATE类型的stu_birthday字段转化为字符串,并限定了样式,代码101

结果如图所示
图片 4

注:在上述代码中,CONVERT(DATE,stu_birthday,101)这么写是没用的。101格式码只对日期格式转化为字符串有效,别的格式转化为日期格式是低效的。

别的常用函数太轻便了此处不写了,略。

1.3.8. 仓库储存进程

提议利用帕斯Carl样式命名,命名格式为[积攒进程名称]。

示例:GetUser

     AddUser

备注:在SQL Server 2007示范数据库中动用Camel样式命名。

3.13.   类型转变
决不借助任何隐式的数据类型调换,不要假定 T-SQL 会议及展览开须要的退换。比方,把数字变量赋予字符值。相反,在为变量赋值或相比较值从前,应运用非凡的 CONVERT 函数使数据类型相匹配。

设置有 Sql Server 二零零六时能够浏览:ms-help://MS.SQLCC.v10/MS.SQLSV智跑.v10.zh-CHS/s10de_6tsql/html/a87d0850-c670-4720-9ad5-6f5a22343ea8.htm

2.8.运算符的刚开始阶段级

优先级 运算符
1 ~(位反)
2 *(乘),/(除),%(取模)
3 (正),-(负), (加), (连接),-(减),&(位与)
4 =,>,<,>=,<=,<>,!=,!>,!<(比较运算符)
5 ^(位异或),位或(符号打不出来,前面有,自己翻)
6 NOT
7 AND
8 ALL,ANY,BETWEEN,IN,LIKE,ALL,SOME
9 =(赋值)

当表明式中的运算符有同样的事先级时,遵照它们在表明式中的地方,一元运算符按从右往左运算,二元运算符(对五个表达式作用的运算符)按从左往右运算。
示例9:验证运算符优先级
进行下列语句

DECLARE @result INT,@num INT
SET @num=45
SET @result=@num (~@num)*4-@num/(~@num)
SELECT @result AS result
GO

结果如图所示
图片 5
测算代码中的表达式
@result=@num (~@num)4-@num/(~@num)
=@num (-46)
4-@num/(-46)
=45 (-46)4-45/(-46)
=45 (-46)
4
=-139

4.2.TRANSACTION注释

提议在每一个事情的发端进行解说,表达该业务的功能。

-- < Modifier,Date, Description >

BEGIN TRANSACTION;

其余一种艺术为增添ddl前缀,
示例:
CREATE TRIGGER [ddlDatabaseTriggerLog] 
ON DATABASE 
FOR DDL_DATABASE_LEVEL_EVENTS 
AS

其他资源

数据类型调换(数据库引擎)
编排国际化 Transact-SQL 语句

3.5.WAITFOLacrosse延缓语句

WAITFO智跑延迟语句能够让在它现在的口舌在贰个点名的天天可能时间间隔后举办,能够悬挂起批管理,存款和储蓄进程或业务的实施。
示例12:在有个别时刻点查询Student表学号为20180101的学员音信

BEGIN
WAITFOR TIME '15:03'--在15点03分查询
SELECT * FROM Student
WHERE stu_no='20180101'
END

示例13:在3分钟后查询Student表学号为20180102的上学的小孩子消息

BEGIN
WAITFOR DELAY '00:03'--在3分钟后查询
SELECT * FROM Student
WHERE stu_no='20180102'
END

图片 6

1.2.着力标准

提出选用帕斯Carl样式或Camel样式命名数据库对象。

大写T-SQL语言的持有主要字,谓词和连串函数。

4.2. TRANSACTION注释
建议在各种事情的起头进行评释,表明该职业的遵守。
-- < Modifier,Date, Description >
BEGIN TRANSACTION;

二进制样式

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

3.说了算语句

3.16.   Unicode字符串

在Unicode字符后面使用N前缀,防止引起数据的差别等。

示例:

-- Assumes the default code page is not Greek

CREATE TABLE #t1 (c1 nchar(1))

INSERT #t1 VALUES(N'Ω')

INSERT #t1 VALUES('Ω')

SELECT * FROM #t1

输出结果:

c1  


Ω

O

1.3. 对象命名
1.3.1.  数据库
首先种方法,采纳帕斯Carl样式命名,命名格式为[花色葡萄牙语名称]。
示例:AdventureWorks
第三种办法,采纳帕斯Carl样式命名,命名格式为[类型斯洛伐克语名称]   Db。
示例:AdventureWorksDb
  BizTalkRuleEngineDb
建议利用第一种艺术。

 

生成 XML 实例。

 

 

1

封存无用空格。此体制设置将暗许的 xml:space 管理情势设置为与钦赐了 xml:space="preserve" 的行事同样。

2

启用有限的当中 DTD 子集管理。

只要启用,则服务器可选用在那之中 DTD 子集提供的以下音信来执行非验证剖判操作。

  • 应用质量的默许值。

  • 深入分析并增加内部实体引用。

  • 自己批评 DTD 内容模型以完结语法的正确性。

深入分析器将忽略外界 DTD 子集。另外,不评估 XML 表明来查阅 standalone 属性是设置为 yes 还是 no,而是将 XML 实例当成二个单身文书档案进行剖释。

3

保存无用空格,并启用有限的里边 DTD 子集处理。

3.7.GOTO跳转语句

该语句使T-SQL批管理的进行跳转至钦赐标签。由于该语句破坏结构化语句的协会,尽量少用
示例13:将GOTO作为分支机制
施行上边语句

DECLARE @Counter int;  
SET @Counter = 1;  
WHILE @Counter < 10  
BEGIN   
    SELECT @Counter  
    SET @Counter = @Counter   1  
    IF @Counter = 4 GOTO Branch_One --Jumps to the first branch.  
    IF @Counter = 5 GOTO Branch_Two  --This will never execute.  
END  
Branch_One:  
    SELECT 'Jumping To Branch One.'  
    GOTO Branch_Three; --This will prevent Branch_Two from executing.  
Branch_Two:  
    SELECT 'Jumping To Branch Two.'  
Branch_Three:  
SELECT 'Jumping To Branch Three.';

结果如图所示
图片 7
当Counter=4时,执行GOTO语句输出Branch One,实行完这几个讲话之后就打破了WHILE循环,接着实践Branch_One语句中的GOTO,输出Branch Three,甘休。

注:在WHILE循环中应用GOTO会打破循环。

示例14:用GOTO语句完毕示例1第11中学打字与印刷菱形的效劳
试行下列语句

DECLARE @width int,@j int,@i int
SET @width=9--@width为菱形的最大宽度
SET @j=1--@j表示每行打印的“*”符号的个数
SET @i=1--@i表示下一行打印第i行
Set3:PRINT SPACE((@width-@j)/2) REPLICATE('*',@j)--SPACE函数打印n个空字符,REPLICATE打印n个特定字符串
SET @i=@i 1
IF @i<=(@width 1)/2
GOTO Set1
ELSE
GOTO Set2
Set1:
SET @j=@j 2
GOTO Set3
Set2:
SET @j=@j-2
IF @j>=1
GOTO Set3

结果如图所示
图片 8

1.3.指标命名

不独一非聚焦索引:PK_[表名称]_[列名称]。
示例:IX_Store_SalesPersonID

F. 使用含有类型化的 XML 的 CONVERT 或 CAST

上面包车型大巴多少个示范突显怎么通过 xml 数据类型使用 CONVERT 转变为类型化的 XML。

此示例将蕴含空格、文本和符号的字符串转换为类型化的 XML,并剔除全部无用空格(节点之间的分界空格):

 

复制代码

CONVERT(XML, '<root><child/></root>')

此示例将富含空格、文本和标识的切近字符串转变为类型化的 XML,并保存无用空格(节点之间的分界空格):

 

复制代码

CONVERT(XML, '<root>          <child/>         </root>', 1)

此示例将富含空格、文本和标识的字符串转变为类型化的 XML:

 

复制代码

CAST('<Name><FName>Carol</FName><LName>Elliot</LName></Name>'  AS XML)

关于详细新闻,请参阅生成 XML 实例。

1.4.1.1.系统全局变量

系统全局变量分为两大类,一类是与自然SQL Server连接或与当前拍卖有关的全局变量,如@@Rowcount代表方今一个话语影响的行数。@@error表示保留这段日子执行操作的荒谬状态。一类是与一切SQL Server系统有关的全局变量,如@@Version代表如今SQL Server的版本信息。

SELECT @@VERSION AS 当前版本;--查看当前SQL Server的版本信息

结果如图所示
图片 9

1.3.5. 数据表

采纳帕斯Carl样式命名,命名格式为[表名]。

示例:Employee

      Product

表名以朝鲜语单数命名,紧假若参谋SQL Server 2006演示数据库,个人驾驭不选取复数是为了越来越好的行使ORM工具生成符合编制程序标准的代码(举例C#)。

示例:使用Product

 而不是Products

3.11.   使用“*”
尽量制止在别的代码中使用 “SELECT *”。

参考

SELECT (Transact-SQL)
系统函数 (Transact-SQL)

4.常用函数

3.10.   语句分割

选择三个(并不是三个)空行分隔 T-SQL 代码的逻辑块。

5.2. Camel 大小写
标记符的首字母小写,各个前面连接的单词的首字母大写,别的字母小写的书写约定。对于缩写的双字母单词,供给它们出现在标记符首部时整个大写,不然一切大写。
例如:applicationException
      id

E. 使用带有 LIKE 子句的 CAST

上边包车型大巴示范将 moneySalesYTD 转换为 int 列,然后再改换为 char(20) 列,以便能够将其用来 LIKE 子句。

 

复制代码

USE AdventureWorks2008R2;
GO
SELECT p.FirstName, p.LastName, s.SalesYTD, s.BusinessEntityID
FROM Person.Person p JOIN Sales.SalesPerson s ON p.BusinessEntityID = s.BusinessEntityID
WHERE CAST(CAST(s.SalesYTD AS int) AS char(20)) LIKE '2%';
GO

上面是结果集:

FirstName LastName SalesYTD SalesPersonID


Tsvi Reiter 2811012.7151 279

Syed Abbas 219088.8836 288

Rachel Valdez 2241204.0424 289

 

(3 row(s) affected)

3.1.BEGIN END语句块

BEGIN END能够定义SQL Server语句块,使那一个言辞作为一组语句施行,允许语句嵌套。比方请见示例4

概述

3.3. 积累格式
用尽全力利用Unicode数据存储格式,升高可移植性和包容性,实际利用中尽量利用nchar、nvarchar、ntext代替char、varchar、text。

在 SQL Server 二〇〇五 及更加高版本中,某个 datetime 转变具备不生硬

在 SQL Server 3000 中,从 string 到 date 和 time 的调换被标志为明显调换。可是,那对于下表中列出的体制却不创制。对于这么些样式,相应的转移取决于语言设置。SQL Server 二零零六 及越来越高版本将那一个转变标识为不明明转换。

下表列出了从 string 到 datetime 的转变为不肯定转变的样式。

2.5.逻辑运算符

逻辑运算符的成效是对标准进行测量试验。ALL,AND,ANY,BETWEEN,EXISTS,IN,LIKE,NOT,ALL,SOME。上面用SOME来比喻。SOME的作用是只要在一组比较中,有个别为true那就为true。
示例6:查询Student表中是还是不是存在入学战表当先平均分的学员,假若存在,输出true,不设有输出false。
Student表的stu_enter_score列(入学战表)数据如图所示
图片 10
施行下面包车型地铁言语

USE test
IF (SELECT AVG(stu_enter_score) FROM Student)<=SOME(SELECT stu_enter_score FROM Student)
PRINT 'true'
ELSE
PRINT 'false'
GO

结果如图所示
图片 11

附录B  参照他事他说加以考察财富

3.16.   Unicode字符串
在Unicode字符后边使用N前缀,幸免引起数据的不等同。
示例:
-- Assumes the default code page is not Greek
CREATE TABLE #t1 (c1 nchar(1))
INSERT #t1 VALUES(N'Ω')
INSERT #t1 VALUES('Ω')
SELECT * FROM #t1
出口结果:
c1   
---- 
Ω
O

语法

1.4.1.2.局地变量

局地变量能够享有一定数据类型,有必然的效率域,一般用来充当计数器总计或决定循环实行次数,只怕用于保存数据值。局地变量前独有1个@符,用DECLARE语句申明局地变量。

USE test
DECLARE @StudentId varchar(20)
SET @StudentId=(
SELECT Student.stu_no
FROM Student
WHERE stu_enter_score='603')
SELECT @StudentId AS 入学分数为603的学生学号
GO

结果如图所示
图片 12

3.8.语句缩进

四个嵌套代码块中的语句使用两个空格的缩进。使用Microsoft SQL Server Management Studio ,选拔“工具”菜单,张开“选项”菜单,在增选对话框中挑选文本编辑器->纯文本->制表符,选中“插入空格单选框”,设置“制表符大小”为4,缩进大小为“4”。

1.3.2.  数据库文件
数据文件:[数据库名称]   _Data.mdf
日志文件:[数据库名称]   _Log.ldf
示例:AdventureWorks_Data.mdf
      AdventureWorks_Log.ldf

请参阅

1.3.数目调节语言DCL

波及到权力管理的语言称为数据调控语言,首要用来实践有关安全治本的操作。如授予权限(GRANT),收回权限(REVOKE),拒绝授予主体权限,并防范主体通过组或剧中人物成员持续权限(DENY

5.2.Camel 大小写

标记符的首字母小写,各个后边连接的单词的首字母大写,其他字母小写的书写约定。对于缩写的双字母单词,要求它们出现在标志符首部时整个大写,不然一切大写。

例如:applicationException

      id

3.4. 项目选用
万一字符具备生硬的尺寸,使用nchar替代nvarchar;char代替varchar。
在只有四个恐怕数值时,使用bit替代int或smallint。
在SQL Server 2005中,使用nvarchar(MAX)代替ntext;varchar(MAX)代替text;varbinary(MAX)代替image。
在特种的数据表结构中可考虑xml数据类型,达到事半工倍的功力。

示例

3.8.T索罗德Y CATCH错误管理语句

假设T福睿斯Y块内部产生错误,会将决定传递给CATCH块内的语句组。T宝马X5Y CATCH构造捕捉全部严重品级大于10但不会截止数据库连接的不当。
示例15:TRY CATCH的示例
实行下列语句

BEGIN TRY
SELECT * FROM Student
SELECT 120/0 FROM Student
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE() AS '错误信息'
END CATCH

实行结果如图所示
图片 13
语句中3个select语句全体都实践了。假如把报错的select语句放到通常的select语句前面,平常的select语句还是可以不能够实行吗?试行下列语句

BEGIN TRY
SELECT 120/0 FROM Student
SELECT * FROM Student
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE() AS '错误信息'
END CATCH

结果如图所示
图片 14
符合规律select语句不能够施行。TOdysseyY CATCH语句的逻辑是,一旦T讴歌RDXY语句块中出现难点讲话,登时跳转到CATCH语句块,TSportageY语句块接下去的言辞不再实行。

6.2.SQL Server 二零零五示范数据库

AdventureWorks

AdventureWorksDW

3.  SQL编写
3.1. 大小写
大写T-SQL 语言的装有重大字,谓词和体系函数。变量名称及游标名称使用帕斯Carl样式。数据类型定义使用成套大写。
示例:DECLARE @LastName nvarchar(32);

Date 和 Time 样式

如果 expression 为 date 或 time 数据类型,则 style 可感觉下表中显得的值之一。其余值作为 0 举办管理。SQL Server 使用科威特算法来帮助阿拉伯体制的日子格式。

  • 1.应用Transact-SQL语言编制程序
    • 1.1.数目定义语言DDL
    • 1.2.多少操纵语言DML
    • 1.3.数码调整语言DCL
    • 1.4.Transact-SQL语言基础
  • 2.运算符
    • 2.1.算数运算符
    • 2.2.赋值运算符
    • 2.3.位运算符
    • 2.4.相比运算符
    • 2.5.逻辑运算符
    • 2.6.连接运算符
    • 2.7.一元运算符
    • 2.8.运算符的预先级
  • 3.说了算语句
    • 3.1.BEGIN END语句块
    • 3.2.IF ELSE语句块
    • 3.3.CASE分支语句
    • 3.4.WHILE语句
    • 3.5.WAITFORAV4推迟语句
    • 3.6.RETUPRADON无条件退出语句
    • 3.7.GOTO跳转语句
    • 3.8.T中华VY CATCH错误管理语句
  • 4.常用函数
    • 4.1.数据类型调换函数

1.3.6. 多少视图

视图名称接纳帕斯Carl样式命名,命名格式为v

  • [视图名称]。

示例:vEmployee

      vSalesPerson

3.9. 语句换行
提出SQL代码每行以重大字或“'”初始。
示例:
SELECT [ShiftID]
      ,[Name]
      ,[StartTime]
      ,[EndTime]
      ,[ModifiedDate]
  FROM [AdventureWorks].[HumanResources].[Shift]

注释

1.1.数量定义语言DDL

是最基础的Transact-SQL语言类型,用来创制数据库和成立,修改,删除数据库中的各个对象,为任何语言的操作提供对象。举个例子数据库,表,触发器,存款和储蓄进程,视图,函数,索引,类型及客商等都以数据库中的对象。常见的DDL语句包涵

CREATE TABLE--创建表
DROP TABLE--删除表
ALTER TABLE--修改表

--

示例:

1.3.8.  囤积进度
提出利用帕斯Carl样式命名,命名格式为[积攒进度名称]。
示例:GetUser
     AddUser

 

对客户定义类型实施操作。有关怎样从 xml 数据类型实行改换的详细消息,请参阅生成 XML 实例。

 

本文由乐百家数据库发布,转载请注明来源:[转]SQL Server 中 Cast 与 Convert