用户登录
用户注册

分享至

T-SQL系列技巧之数据值的乐趣

  • 作者: 时刻准备着日日小兔兔
  • 来源: 51数据库
  • 2020-12-23

    每次微软公司发布新版本SQL Server,肯定会包含对Transact-SQL(T-SQL)功能的增强,SQL Server 2012也不例外。最新更新的T-SQL包括许多新功能和修改元素,扩展了该语言的功能。这许多增强功能基本都可以大致分为两类:专门针对个别数据值的功能和影响整个结果集的功能。


    在本系列技巧文章中,我们将研究许多T-SQL新功能(两种类型的都包括),并通过一些例子来展示它们如何使用。然而要记住,这些讨论只是为了提供对各种语言增强功能的一个概览,我们这里并不会讨论详细的语法规则。


    操作数据值


    SQL Server 2012包括许多T-SQL变化,影响我们解析、转换、连接和生成数据值的方式。此外,T-SQL现在还提供让你测试转换的功能,以便在转换可能失败时更好地控制语句逻辑。新的语言功能还提供了根据单个整数构建日期和时间值的方法。那么,接下来就让我们看看该语言的这几种元素如何使用吧。


    PARSE 和 TRY_PARSE


    “PARSE”函数的功能是把字符串值转换成指定类型,以可以映射到。NET Framework文化环境的格式转换,比如荷兰、波兰、韩国或者泰国。如果没有指定文化环境,SQL Server会使用当前会话关联的语言。


    例如:在下面的“SELECT”语句中,“PARSE”函数把字符串转换为“DATE”数据类型,并把结果格式化为“捷克”文化环境形式:


    DECLARE @date1 VARCHAR(8);


    SET @date1 = CONVERT(VARCHAR(8), GETDATE(), 22);


    SELECT PARSE(@date1 AS DATE USING 'Cs-CZ‘);


    该函数在“@date1”变量中转换字符串值,这是通过“GETDATE()”函数获取到的,基于当前日期产生。“AS DATE”关键字指定字符串要转换成“DATE”类型。使用“Cs-Cz”原始表示结果应该被格式化为由“Cs-Cz”代码代表的文化格式,也就是“捷克”.


    因为“PARSE”是这种方式的用法,“SELECT”语句返回值是“2012-04-06”(实际日期是2012年6月4日),你可以指定任何其它可用文化,指定后会影响结果输出。例如,下面的例子使用了美国英语格式编码(en-US):


    DECLARE @date2 VARCHAR(8);


    SET @date2 = CONVERT(VARCHAR(8), GETDATE(), 22);


    SELECT PARSE(@date2 AS DATE USING 'en-US’);


    现在“SELECT”语句返回的日期格式就是“2012-06-04”.要注意月和日与前面例子中的结果正好相反。[page]
    在某些情况下,转换会失败,SQL Server会返回错误。例如,下面的例子尝试把字符串值“today”转换为“DATE”数据类型:


    DECLARE @date3 VARCHAR(8);


    SET @date3 = 'today';


    SELECT PARSE(@date3 AS DATE USING 'Cs-CZ‘);


    因为你不能把字符串转换为“DATE”数据类型,所以这条“SELECT”语句就会报错。但是T-SQL现在支持“TRY_PARSE”函数,顾名思义就是支持我们做转换测试的。在下面的例子中,“SELECT”语句使用“TRY_PARSE ”把“today”转换为“DATE”数据类型:


    DECLARE @date4 VARCHAR(8);


    SET @date4 = 'today';


    SELECT TRY_PARSE(@date4 AS DATE USING 'Cs-CZ’);


    该“SELECT”语句现在就不会返回错误了,返回的是“NULL”值。通过在真正做转换之前设定测试条件验证转换是否返回“NULL”值,你可以使用这个逻辑控制你的语句流程。


    不过,要注意的是如果转换成功的话“TRY_PARSE”函数输出结果与“PARSE ”函数一样。下面的例子使用“TRY_PARSE”转换一个真实的日期值,而不是像“today”那样的字符串。请看:


    DECLARE @date5 VARCHAR(8);


    SET @date5 = CONVERT(VARCHAR(8), GETDATE(), 22);


    SELECT TRY_PARSE(@date5 AS DATE USING 'Cs-CZ‘);


    正如你所预料的,“SELECT”语句返回值“2012-04-06”,正如你在“PARSE ”函数转换时看到的一样。


软件
前端设计
程序设计
Java相关