SQL Server中T-SQL 数据类型转换详解
作者:悦光阴 发布时间:2024-01-18 18:44:20
常用的转换函数是 cast 和 convert,用于把表达式得出的值的类型转换成另一个数据类型,如果转换失败,该函数抛出错误,导致整个事务回滚。在SQL Server 2012版本中,新增两个容错的转换函数:try_cast 和 try_convert,如果转换操作失败,该函数返回null,不会导致整个事务失败,事务继续执行下去。
注意:对于SQL Server显式定义的不合法转换,try_cast 和 try_convert 会失败,抛出错误信息:Explicit conversion from data type int to date is not allowed.
select try_cast(1 as date)
转换函数是parse 和 try_parse,只用于把字符类型转换为 date/time 和 数字类型,在解析字符时会产生一定的性能消耗。
一,时间类型转换
在把日期/时间类型转换成字符串时,常用的转换函数是Convert和Cast,convert函数能够在一定程度上显式控制日期/时间的显示格式,而cast对日期/时间类型的显示格式,无法显式控制,我推荐使用另一个功能更强大的函数:FORMAT,该函数用于把日期时间类型,按照指定的格式转换成字符串,也可以把数值按照特定的格式输出。
1,常用的转换函数
convert 常用于转换date,datetime 等日期/时间类型,通过指定style参数,能够控制数据显示的格式
CAST ( expression AS data_type [ ( length ) ] )
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
常用的style及其显示格式如下:
101 mm/dd/yyyy 110 mm-dd-yyyy 111 yyyy/mm/dd 112 yyyymmdd 120 yyyy-mm-dd hh:mm:ss 121 yyyy-mm-dd hh:mm:sssssss
CONVERT函数的style是数字,记忆起来比较困难,只能按照系统定义的格式来显示,不够灵活。SQL Server提供更为灵活的转换函数FORMAT。
2,FORMAT函数,控制日期和时间类型的显示格式
FORMAT函数主要用于格式化显示date/time类型和数值类型,参数format用于指定显示的格式,给予用户对格式更自由地控制,culture参数是可选的,用于指定显示的语言,该函数返回值的数据类型是NVARCHAR,如果格式转换失败,该函数返回NULL:
FORMAT ( value, format [, culture ] )
当转换date/time时,在format参数中指定日期/时间显示的格式,通常情况下,日期/时间的格式使用以下关键字符作为占位符:yyyy、MM、dd用来表示:年、月、日,而hh、mm、ss用来表示:时、分、秒,并使用“/”,“-”等作为连接符,例如:
DECLARE @d DATETIME = GETDATE();
SELECT FORMAT( @d, 'dd/MM/yyyy', 'en-US' ) AS 'DateTime Result'
当转换数值类型时,在参数format中使用#代表一个数字,使用相应的连接符,拼接成数字的格式字符,例如:
FORMAT(123456789,'###-##-####') AS 'Custom Number Result
二,容错的转换函数
TRY_CAST 和TRY_CONVERT是容错的转换函数,该函数尝试把表达式的值转换为指定的类型,如果转换成功,返回指定类型的值;如果尝试转换失败,返回NULL;如果请求把一个类型转换为另一个被显式禁止的数据类型,那么尝试转换失败,抛出错误消息,也就是说,尝试转换能够具有一定的容错,但是,不能做“违法”的转换操作。
TRY_CAST ( expression AS data_type [ ( length ) ] )
TRY_CONVERT ( data_type [ ( length ) ], expression [, style ] )
1,try_cast 返回null
SELECT CASE WHEN TRY_CAST('test' AS float) IS NULL
THEN 'Cast failed'
ELSE 'Cast succeeded'
END AS Result;
2,try_cast 转换失败,返回error
SELECT TRY_CAST(4 AS xml) AS Result;
错误消息是:Explicit conversion from data type int to xml is not allowed.
3,try_cast转换成功
SET DATEFORMAT mdy;
SELECT TRY_CAST('12/31/2010' AS datetime2) AS Result;
4,try_convert常用于把date/time类型转换为指定格式的字符串
系统预定义Style,通过style参数指定最终显示date/time的格式
SELECT TRY_CONVERT(varchar(8),getdate(),112 ) AS Result;
三,转换的性能
转换函数的性能是不同的,经过测试,cast 和 convert 的转换性能最好,要比try_cast和try_convert要好一些;而Cast的转换性能比convert要好一点。
参考文档:
Performance Comparison of the SQL Server PARSE, CAST, CONVERT and TRY_PARSE, TRY_CAST, TRY_CONVERT Functions
CAST and CONVERT (Transact-SQL)
来源:http://www.cnblogs.com/ljhdo/p/5461799.html


猜你喜欢
- 前言相关性分析算是很多算法以及建模的基础知识之一了,十分经典。关于许多特征关联关系以及相关趋势都可以利用相关性分析计算表达。其中常见的相关性
- 1、 select top 10 * from ( select top (@Page * 10) ROW_NUMBER() OVER (o
- 原来是在系统上出了问题.是2003的IIS出现了问题,因为是2003的系统,它对ASP的上传文件做出了200K的限制,解决问题方法如下 :
- 懒加载:也叫延迟加载,即在需要的时候进行加载,随用随载。 像vue这种单页面应用,如果没有应用懒加载,运用webpack打包后的文
- 本文实例讲述了python执行get提交的方法。分享给大家供大家参考。具体如下:import sys, urllib2, urllibdef
- 不论你做什么样的设计,色彩都是一个不容忽视的问题。色彩以一种“隐蔽”的方式传达的各种信息,这些信息会影响观看者的心理和感受,左右他们的判断和
- 本文实例为大家分享了mysql免安装版配置教程,供大家参考,具体内容如下1.下载MySQL免安装版压缩包,并减压到自定义目录,比如:D:\p
- 自带验证器1、UniqueValidator用于验证(唯一)unique=True的字段,常用参数:queryset: required,用
- 树和图的数据结构,就很有意思啦。# coding = utf-8class BinaryTree:def __init__(self, ro
- 相信很多朋友在用Python写完代码之后都迫不及待的想发给对象交流(装X),但是发源码又要求对方有对应的解释器,一般是行不通的,所以我们要把
- Unittestunittest大家应该都不陌生。它作为一款博主在5-6年前最常用的单元测试框架,现在正被pytest,nose慢慢蚕食。渐
- 如下所示:# coding:utf-8'''求两个字符串的最长公共子串思想:建立一个二维数组,保存连续位相同与否的状
- 算法11、分小数和整数:如果小数点个数为1,则可能是小数。如小数点个数为0,则可能是整数。小数点个数非0也非1,那么就不是数字。2、如果是小
- 查询数据指从数据库中获取所需要的数据。查询数据是数据库操作中最常用,也是最重要的操作。用户可以根据自己对数据的需求,使用不同的查询方式。通过
- django 中当我们要查询获取数据时:数据库中的信息:如一个学生信息表 students:get方法:students.objects()
- 首先要声明一下:一般情况下,修改MySQL密码,授权,是需要有mysql里的root权限的。 注:本操作是在WIN命令提示符下,phpMyA
- 1.requiremwnts:Django版本:2.2python版本:3.6djangorestframework版本:3.1django
- 假设我们有一段程序,从 Redis 中读取数据,解析以后提取出里面的 name 字段:import jsonimport redisclie
- 将数组传递给前台模板:1.def modifyBtn(req,modifyip): print modifyip c
- 背景:作为一个python小白,今天从菜鸟教程上看了一些python的教程,看到了python的一些语法,对比起来(有其他语言功底),感觉还