原文:SQL Server系统函数:类型转换函数


1.基本的转化


  1. SELECT CAST(2008 as varchar(4)) + ' year!'
  2. SELECT CONVERT(varchar(4),2008) + ' year!'

2、 把日期转化为文本


  1. SELECT CONVERT(VARCHAR(30),GETDATE(),120) --年-月-日 时:分:秒(24h)
  2. SELECT CONVERT(VARCHAR(10),GETDATE(),120) --年-月-日 时:分:秒(24h)
  3. SELECT CONVERT(VARCHAR(8),GETDATE(),108) -- 时:分:秒(24h)
  4. select CONVERT(varchar(30),getdate(),121) --年-月-日 时:分:秒 时:分:秒.毫秒(24h)

3、使用不同样式转换二进制和字符数据的结果


  1. SELECT CONVERT(varbinary,
  2. 'SQL Server 2008 T-SQL Recipes',
  3. 0 --表示把字符串转化为二进制
  4. )
  5. select CONVERT(char(29),
  6. 0x53514C20536572766572203230303820542D53514C2052656369706573,
  7. 0 --把二进制转化为ASCII格式的字符串
  8. )
  9. --下面两个都是转化为字面量
  10. SELECT CONVERT(CHAR(60),
  11. 0x53514C20536572766572203230303820542D53514C2052656369706573,
  12. 1 --转化为16进制字面量格式,带0x前缀
  13. )
  14. SELECT CONVERT(CHAR(60),
  15. 0x53514C20536572766572203230303820542D53514C2052656369706573,
  16. 2
  17. ) --转化为16进制字面量格式,不带0x前缀

4、计算表达式返回的类型


  1. select ISDATE('20000-01-01')
  2. select ISDATE('2000-01-01')
  3. --字符会返回0
  4. SELECT ISNUMERIC('ABC')
  5. --如果数字之间有空格,也会返回0
  6. SELECT ISNUMERIC('12 3')
  7. --如果数字之间有其他符号,也会返回0
  8. SELECT ISNUMERIC('12,3')
  9. --如果数据末尾,开头有空格,不会有影响,还是返回1
  10. SELECT ISNUMERIC(' 12,3 ')

5、 这里需要特别提到的是,在原来的公司,曾经遇到过日期转换的问题,由于把日期数据存储在了varchar类型中,导致转换报错,那么这种情况,如何处理呢?

下面通过一个简单的例子来说明处理方法:


  1. if object_id('a') is not null
  2. drop table a
  3. go
  4. create table A(Id int, date varchar(30))
  5. insert into A
  6. select 1, '2013-10-40 00:00:00' union all
  7. select 2, '2013-10-01 12:00:00' union all
  8. select 3, '2014-01-01 12:09:34'
  9. --报错了
  10. select * from A
  11. where Isdate(date) = 1
  12. and Convert(datetime,date) >= '2014-01-01 00:00:00'
  13. /*
  14. Id date
  15. ----------- ------------------------------
  16. 消息 242,级别 16,状态 3,第 10 行
  17. 从 varchar 数据类型到 datetime 数据类型的转换产生一个超出范围的值。
  18. */
  19. --找到有问题的数据
  20. select *,
  21. case when isdate(date) = 1 then '是日期'
  22. when isdate(date) = 0 then '不是日期'
  23. end
  24. from A
  25. --where Isdate(date) = 1
  26. --and Convert(datetime,date) >= '2014-01-01 00:00:00'
  27. /*
  28. Id date
  29. ----------- ------------------------------ --------
  30. 1 2013-10-40 00:00:00 不是日期
  31. 2 2013-10-01 12:00:00 是日期
  32. 3 2014-01-01 12:09:34 是日期
  33. (3 行受影响)
  34. */
  35. --这里通过convert函数,把字符串格式化为日期格式的字符串
  36. --然后与右边的字符串进行比较,就不会报错了
  37. select * from A
  38. where Isdate(date) = 1 --是日期
  39. and Convert(VARCHAR(20),[date],121) >='2013-11-01 00:00:00'

6、把负数转化为16进制数


  1. --1.一开始这么转化,但是有问题,关键在于你的这个数太大,超出了int的范围
  2. select cast(-2161622263693857431 as varbinary)
  3. /*
  4. 0x1300000097520CFEFE9FFF1D
  5. */
  6. --2.这样就行了,转化为bigint,在转为varbianry,但是这个不是字符串,所以还是不行
  7. select cast(cast(-2161622263693857431 as bigint) as varbinary)
  8. /*
  9. 0xE200600101F3AD69
  10. */

要转为文本,需要创建自定义函数:


  1. use 你的数据库
  2. go
  3. IF OBJECT_ID ('dbo.varbin2hexstr') IS NOT NULL
  4. DROP FUNCTION dbo.varbin2hexstr
  5. GO
  6. --这个函数实现了把varbinary类型数据转化为varchar类型的数据
  7. CREATE function varbin2hexstr(
  8. @bin varbinary(max)
  9. )returns varchar(max)
  10. as
  11. begin
  12. declare @re varchar(max),@i int
  13. select @re='',@i=datalength(@bin)
  14. while @i>0
  15. select @re=substring('0123456789ABCDEF',substring(@bin,@i,1)/16+1,1)
  16. +substring('0123456789ABCDEF',substring(@bin,@i,1)%16+1,1)
  17. +@re
  18. ,@i=@i-1
  19. -- return('0x'+@re)
  20. return @re
  21. end
  22. GO
  23. --3.调用函数dbo.varbin2hexstr,把varbinary转为字符串,这样才行
  24. select dbo.varbin2hexstr(cast(cast(-2161622263693857431 as bigint) as varbinary))
  25. /*
  26. E200600101F3AD69
  27. */
发布了416 篇原创文章 · 获赞 135 · 访问量 94万+

SQL Server系统函数:类型转换函数的更多相关文章

  1. SQL Server系统函数简介[转]

    一.字符转换函数1.ASCII()返回字符表达式最左端字符的ASCII 码值.在ASCII()函数中,纯数字的字符串可不用‘’括起来,但含其它字符的字符串必须用‘’括起来使用,否则会出错.2.CHAR ...

  2. sql server 系统常用函数:聚合函数 数学函数 字符串函数 日期和时间函数和自定义函数

    一.系统函数 1.聚合函数 聚合函数常用于GROUP BY子句,在SQL Server 2008提供的所有聚合函数中,除了COUNT函数以外,聚合函数都会忽略空值AVG.COUNT.COUNT_BIG ...

  3. SQL Server系统函数:系统信息函数

    原文:SQL Server系统函数:系统信息函数 1.会话id,服务器信息.用户信息 select @@SPID, --返回当前连接的会话ID:SPID @@servername, --SQL Ser ...

  4. SQL Server系统函数:字符串函数

    原文:SQL Server系统函数:字符串函数 1.字符转化为ASCII,把ASCII转化为字符,注意返回的值是十进制数 select ASCII('A'),ASCII('B'),ASCII('a') ...

  5. SQL Server系统函数:日期函数

    原文:SQL Server系统函数:日期函数 1.返回当前日期和时间 select GETDATE() '当前日期-精确到33毫秒' select GETUTCDATE() 'UTC日期和时间-精确到 ...

  6. SQL Server系统函数:元数据函数

    原文:SQL Server系统函数:元数据函数 1.列的长度.列名 --列的长度 select COL_LENGTH('dbo.wct', --表名 'wcid') --列名 --列名 select ...

  7. sql server 2012 自定义聚合函数(MAX_O3_8HOUR_ND) 计算最大的臭氧8小时滑动平均值

    采用c#开发dll,并添加到sql server 中. 具体代码,可以用visual studio的向导生成模板. using System; using System.Collections; us ...

  8. ylb:SQL Server中的时间函数

    ylbtech-SQL Server:SQL Server-SQL Server中的时间函数 SQL Server中的时间函数. 1,SQL Server中的时间函数 返回顶部 1.   当前系统日期 ...

  9. SQL Server中的CLR编程——用.NET为SQL Server编写存储过程和函数

    原文:SQL Server中的CLR编程--用.NET为SQL Server编写存储过程和函数 很早就知道可以用.NET为SQL Server2005及以上版本编写存储过程.触发器和存储过程的,不过之 ...

随机推荐

  1. AndroidStudio导入开源项目提示报错:Gradle sync failed: SSL peer shut down incorrectly

    问题描述: AndroidStudio导入开源项目提示报错:Gradle sync failed: SSL peer shut down incorrectly (1 m 12 s 92 ms) 解决 ...

  2. matlab将多张图片合成视频

    文件夹内多张图合成为视频: route='D:\文件及下载相关\桌面\**\Matlab_code\result';%基本路径 %d=dir([route '\*.bmp']);%.jpg格式 Wri ...

  3. stub 和 skeleton 的讲解,自己实现一个stub和skeleton程序

    转: stub 和 skeleton 的讲解,自己实现一个stub和skeleton程序 RMI的本质就是实现在不同JVM之间的调用,它的实现方法就是在两个JVM中各开一个Stub和Skeleton, ...

  4. 10--STL无序容器(Unordered Containers)

    一:无序容器简介 Unordered Containers也是一种关联式容器.其中元素是分散,没有定性的排列(不是图中那样松散).其中元素可能在某一次操作后改变原来的位置. 哈希表的链地址法,更能表现 ...

  5. 【408】C函数中的ADT

    类似类的形式 boardADT.h:所有的宏.声明等部分写在这里 boardADT.c:只需要 #inclue "boardADT.h",不需要 include 其他系统头文件,然 ...

  6. Python使用设计模式中的责任链模式与迭代器模式的示例

    Python使用设计模式中的责任链模式与迭代器模式的示例 这篇文章主要介绍了Python使用设计模式中的责任链模式与迭代器模式的示例,责任链模式与迭代器模式都可以被看作为行为型的设计模式,需要的朋友可 ...

  7. LeetCode_167. Two Sum II - Input array is sorted

    167. Two Sum II - Input array is sorted Easy Given an array of integers that is already sorted in as ...

  8. Apache配置优化之开启KeepAlive

    在HTTP 1.0中和Apache服务器的一次连接只能发出一次HTTP请求,而KeepAlive参数支持HTTP 1.1版本的一次连接,多次传输功能,这样就可以在一次连接中发出多个HTTP请求.从而避 ...

  9. 心の壁 From EOE:Air / 真心为你

    https://www.bilibili.com/bangumi/media/md10272/ 真嗣:我问你. 凌波:什么? 真嗣:梦到底是什么呢? 凌波:梦? 真嗣:我不太明白什么是现实. 凌波:你 ...

  10. Egret入门学习日记 --- 第十六篇(书中 6.10~7.3节 内容)

    第十六篇(书中 6.10~7.3节 内容) 昨天搞定了6.9节,今天就从6.10节开始. 其实这个蛮简单的. 这是程序员模式. 这是设计师模式. 至此,6.10节 完毕. 开始 6.11节. 有点没营 ...