转换函数

一般来说,转换函数大家并不陌生。就是使用cast 和 convert 进行数据类型的转换来达到表达式的比较,语句的拼接等效果。

使用倒是很容易的。一般情况下这样使用就可以了。

SELECT CONVERT(INT,‘123‘)
SELECT CAST(‘123‘ AS INT)

还有一个比较少用的,parse 函数。(PARSE 仅用于从字符串转换为日期/时间和数字类型。 对于一般的类型转换,请继续使用 CAST 或 CONVERT。 请记住,分析字符串值会带来一定的性能开销,这句是文档里面直接抄下来的)

既然有了 Convert 和 Cast ,为什么还需要一个 parse 函数呢?比如说有下面一种情况,我们一看就知道是2016年1月1日,但是使用Convert 和cast 就会报转换失败了,因为无法直接转换成对应的日期格式。那么这时候就要使用 parse 函数就可以了~然而parse 函数虽然方便,但是一般情况下并不推荐使用,因为使用parse函数设计到里面的字符分析,会带来性能开销

(Parse函数的说明  https://msdn.microsoft.com/zh-cn/library/hh213316(v=sql.120).aspx)

SELECT CONVERT(DATETIME,‘2016年1月1日‘)
SELECT CAST(‘2016年1月1日‘ AS DATETIME)

SELECT CONVERT(DATETIME,‘2016Jan01‘)
SELECT CAST(‘2016Jan01‘ AS DATETIME)
SELECT PARSE(‘01Jan2016‘ AS DATETIME USING ‘en-US‘)
SELECT PARSE(‘2016Jan01‘ AS DATETIME USING ‘en-US‘)
SELECT PARSE(‘2016年1月1日‘ AS DATETIME USING ‘zh-CN‘)

-----------------------
2016-01-01 00:00:00.000

-----------------------
2016-01-01 00:00:00.000

-----------------------
2016-01-01 00:00:00.000

然而虽然有了转换的函数,但是有时候转换失败的时候还是会比较蛋疼的。比方说有时候一般来说我知道这列是一个varchar(50),但是里面全部存储的都是钱,那我就信心满满的使用一个

select convert(money , Column1) from table 

这样的语句,殊不知里面其中有一条数据写着 100CNY 那这个转换函数就死翘翘了。要不你就只能做类似的判断来防止了。

select case when ISNUMERIC(Column1) = 1 THEN convert(MONEY , Column1) ELSE NULL END FROM Table

而到了2012以上的版本,Sql Server 支持了使用

Try_Convert()

Try_Cast()

Try_Parse()

3种函数,用法和 Convert,Cast ,Parse 一致,不一样的地方在于,如果转换失败并不会抛错,只会返回Null值,这样纸在某些场景还是可以省下不少功夫。还是比较推荐使用的~

哦~补充一句,祝各位新年快乐~添丁发财

时间: 2024-11-10 10:39:28

转换函数的相关文章

Excel大小写转换函数

Excel中的大小写转换函数 (1).转换为全部小写字母:lower函数 (2).转换为全部大写字母:upper函数 (3).转换为首字母大写,其余小写字母:proper函数 三种函数的使用方式,如下图所示: 流程操作,如下图所示: 小知识,简而记之. 蓝的成长记系列: 原创作品,出自 "深蓝的blog" 博客 蓝的成长记--追逐DBA(1):奔波于路上,挺进山东 蓝的成长记--追逐DBA(2):安装!安装!久违的记忆,引起我对DBA的重新认知 蓝的成长记--追逐DBA(3):古董上操

VC++编程中常用的字符串转换函数

VC++编程中经常遇到不同编码编码的字符串之间需要转换的情况,以下简单提供几个不同编码字符串之间的转换函数: ANSI 字符串和Unicode字符串之间的转换 //Convert wide char string to ANSI string BOOL WCharToMByte(LPCWSTR lpcwszStr,Std::string &str) { DWORD dwMinSize=0; LPSTR lpszStr=NULL; dwMinSize= WideCharToMultiByte(CP

1.socket编程:socket编程,网络字节序,函数介绍,IP地址转换函数,sockaddr数据结构,网络套接字函数,socket相关函数,TCP server和client

 1  Socket编程 socket这个词可以表示很多概念: 在TCP/IP协议中,"IP地址+TCP或UDP端口号"唯一标识网络通讯中的一个进程,"IP 地址+端口号"就称为socket. 在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socket pair就唯一标识一个连接.socket本身有"插座"的意思,因此用来描述网络连 接的一对一关系. TCP/IP协议最早在BSD UNIX上实现,

JS 字符unicode转换函数

/**js Unicode编码转换*/ var decToHex = function(str) {    var res=[];    for(var i=0;i < str.length;i++)        res[i]=("00"+str.charCodeAt(i).toString(16)).slice(-4);    return "\\u"+res.join("\\u");}var hexToDec = function(s

MySQL 转换函数与运算符

Table 12.14 转换函数(Cast Function) 名称 说明 BINARY 将 string 转换为二进制 string CAST() 将某个值转换为特定类型 CONVERT() 将某个值转换为特定类型 BINARY BINARY 运算符将紧随其后的 string 转换为 二进制字符串.主要用来强制进行按字节进行比较(byte by byte),字节而不是字符的字符.这使得字符串比较是区分大小写的, 不管原始的列定义是否是 BINARY 或者 BLOB.BINARY 也对字符串末尾

3字节浮点数在C#的转换函数

单片机中,浮点数常用3字节浮点数表示 将浮点数表示成如下形式进行存储: M为尾数,0<=M<1: E为阶码,是指数部分: C为基数,二进制数的C取2. 上位机从单片机中读取到的字节数据不能直接使用,需要进行转换,以下是在C#中用到的一个转换函数 1 //将3字节浮点数据转换成float 2 static double ToSingle3(byte A, byte B, byte C) 3 { 4 double v = 0; 5 int sign0 = (A & 0x80) == 0 ?

php进制转换函数

php进制转换函数如下: bindec() — 二进制转换为十进制decbin() — 十进制转换为二进制dechex() — 十进制转换为十六进制decoct() — 十进制转换为八进制hexdec() — 十六进制转换为十进制octdec() — 八进制转换为十进制base_convert()– 在任意进制之间转换数字 一,十进制(decimal system)转换函数说明 1,十进制转二进制 decbin() 函数,如下实例 echo decbin(12); //输出 1100 echo

PHP iconv()编码转换函数用法示例

PHP iconv()字符编码转换函数的用法,iconv()函数,在php5中是内置的,语法格式:iconv("UTF- 8","GB2312//IGNORE",$data) ,//IGNORE的意思是忽略转换错误,如果没有ignore参数,在转换错误时所有该字符后面的字符串都无法被保存..PHP iconv()函数用 法的代码示例: <?php echo $str= '你好,欢迎来到源码爱好者!'; echo '<br />'; echo ico

解决Delphi7的自带的UTF-8编码转换函数BUG

Delphi7及其以下版本的 VCL 只支持 Ansi, 所以... WideString 与 UTF8String (定义与 AnsiString 相同) 并没有办法正确的在 VCL 中显示 Delphi7自带的utf-8转换函数遇到其无法识别的字符串就返回空. 用以下转换函数可以解决这个bug unit util_utf8; interface uses Windows; type UTF8String = AnsiString; function AnsiToWide(const S: A