SQL Server系统函数:类型转换函数
1.基本的转化
-
SELECT CAST(2008 as varchar(4)) + ' year!'
-
-
SELECT CONVERT(varchar(4),2008) + ' year!'
2、 把日期转化为文本
-
SELECT CONVERT(VARCHAR(30),GETDATE(),120) --年-月-日 时:分:秒(24h)
-
-
SELECT CONVERT(VARCHAR(10),GETDATE(),120) --年-月-日 时:分:秒(24h)
-
-
SELECT CONVERT(VARCHAR(8),GETDATE(),108) -- 时:分:秒(24h)
-
-
select CONVERT(varchar(30),getdate(),121) --年-月-日 时:分:秒 时:分:秒.毫秒(24h)
3、使用不同样式转换二进制和字符数据的结果
-
SELECT CONVERT(varbinary,
-
'SQL Server 2008 T-SQL Recipes',
-
0 --表示把字符串转化为二进制
-
)
-
-
select CONVERT(char(29),
-
0x53514C20536572766572203230303820542D53514C2052656369706573,
-
0 --把二进制转化为ASCII格式的字符串
-
)
-
-
-
--下面两个都是转化为字面量
-
SELECT CONVERT(CHAR(60),
-
0x53514C20536572766572203230303820542D53514C2052656369706573,
-
1 --转化为16进制字面量格式,带0x前缀
-
)
-
-
SELECT CONVERT(CHAR(60),
-
0x53514C20536572766572203230303820542D53514C2052656369706573,
-
2
-
) --转化为16进制字面量格式,不带0x前缀
4、计算表达式返回的类型
-
select ISDATE('20000-01-01')
-
-
select ISDATE('2000-01-01')
-
-
-
--字符会返回0
-
SELECT ISNUMERIC('ABC')
-
-
--如果数字之间有空格,也会返回0
-
SELECT ISNUMERIC('12 3')
-
-
-
--如果数字之间有其他符号,也会返回0
-
SELECT ISNUMERIC('12,3')
-
-
--如果数据末尾,开头有空格,不会有影响,还是返回1
-
SELECT ISNUMERIC(' 12,3 ')
5、 这里需要特别提到的是,在原来的公司,曾经遇到过日期转换的问题,由于把日期数据存储在了varchar类型中,导致转换报错,那么这种情况,如何处理呢?
下面通过一个简单的例子来说明处理方法:
-
if object_id('a') is not null
-
drop table a
-
go
-
-
create table A(Id int, date varchar(30))
-
-
insert into A
-
select 1, '2013-10-40 00:00:00' union all
-
select 2, '2013-10-01 12:00:00' union all
-
select 3, '2014-01-01 12:09:34'
-
-
--报错了
-
select * from A
-
where Isdate(date) = 1
-
and Convert(datetime,date) >= '2014-01-01 00:00:00'
-
/*
-
Id date
-
----------- ------------------------------
-
消息 242,级别 16,状态 3,第 10 行
-
从 varchar 数据类型到 datetime 数据类型的转换产生一个超出范围的值。
-
*/
-
-
-
--找到有问题的数据
-
select *,
-
case when isdate(date) = 1 then '是日期'
-
when isdate(date) = 0 then '不是日期'
-
end
-
from A
-
--where Isdate(date) = 1
-
--and Convert(datetime,date) >= '2014-01-01 00:00:00'
-
/*
-
Id date
-
----------- ------------------------------ --------
-
1 2013-10-40 00:00:00 不是日期
-
2 2013-10-01 12:00:00 是日期
-
3 2014-01-01 12:09:34 是日期
-
-
(3 行受影响)
-
*/
-
-
-
--这里通过convert函数,把字符串格式化为日期格式的字符串
-
--然后与右边的字符串进行比较,就不会报错了
-
select * from A
-
where Isdate(date) = 1 --是日期
-
and Convert(VARCHAR(20),[date],121) >='2013-11-01 00:00:00'
6、把负数转化为16进制数
-
--1.一开始这么转化,但是有问题,关键在于你的这个数太大,超出了int的范围
-
select cast(-2161622263693857431 as varbinary)
-
/*
-
0x1300000097520CFEFE9FFF1D
-
*/
-
-
-
--2.这样就行了,转化为bigint,在转为varbianry,但是这个不是字符串,所以还是不行
-
select cast(cast(-2161622263693857431 as bigint) as varbinary)
-
/*
-
0xE200600101F3AD69
-
*/
要转为文本,需要创建自定义函数:
-
use 你的数据库
-
go
-
-
IF OBJECT_ID ('dbo.varbin2hexstr') IS NOT NULL
-
DROP FUNCTION dbo.varbin2hexstr
-
GO
-
-
-
--这个函数实现了把varbinary类型数据转化为varchar类型的数据
-
CREATE function varbin2hexstr(
-
@bin varbinary(max)
-
)returns varchar(max)
-
as
-
begin
-
declare @re varchar(max),@i int
-
select @re='',@i=datalength(@bin)
-
while @i>0
-
select @re=substring('0123456789ABCDEF',substring(@bin,@i,1)/16+1,1)
-
+substring('0123456789ABCDEF',substring(@bin,@i,1)%16+1,1)
-
+@re
-
,@i=@i-1
-
-- return('0x'+@re)
-
return @re
-
end
-
-
GO
-
-
-
--3.调用函数dbo.varbin2hexstr,把varbinary转为字符串,这样才行
-
select dbo.varbin2hexstr(cast(cast(-2161622263693857431 as bigint) as varbinary))
-
/*
-
E200600101F3AD69
-
*/
SQL Server系统函数:类型转换函数的更多相关文章
- SQL Server系统函数简介[转]
一.字符转换函数1.ASCII()返回字符表达式最左端字符的ASCII 码值.在ASCII()函数中,纯数字的字符串可不用‘’括起来,但含其它字符的字符串必须用‘’括起来使用,否则会出错.2.CHAR ...
- sql server 系统常用函数:聚合函数 数学函数 字符串函数 日期和时间函数和自定义函数
一.系统函数 1.聚合函数 聚合函数常用于GROUP BY子句,在SQL Server 2008提供的所有聚合函数中,除了COUNT函数以外,聚合函数都会忽略空值AVG.COUNT.COUNT_BIG ...
- SQL Server系统函数:系统信息函数
原文:SQL Server系统函数:系统信息函数 1.会话id,服务器信息.用户信息 select @@SPID, --返回当前连接的会话ID:SPID @@servername, --SQL Ser ...
- SQL Server系统函数:字符串函数
原文:SQL Server系统函数:字符串函数 1.字符转化为ASCII,把ASCII转化为字符,注意返回的值是十进制数 select ASCII('A'),ASCII('B'),ASCII('a') ...
- SQL Server系统函数:日期函数
原文:SQL Server系统函数:日期函数 1.返回当前日期和时间 select GETDATE() '当前日期-精确到33毫秒' select GETUTCDATE() 'UTC日期和时间-精确到 ...
- SQL Server系统函数:元数据函数
原文:SQL Server系统函数:元数据函数 1.列的长度.列名 --列的长度 select COL_LENGTH('dbo.wct', --表名 'wcid') --列名 --列名 select ...
- sql server 2012 自定义聚合函数(MAX_O3_8HOUR_ND) 计算最大的臭氧8小时滑动平均值
采用c#开发dll,并添加到sql server 中. 具体代码,可以用visual studio的向导生成模板. using System; using System.Collections; us ...
- ylb:SQL Server中的时间函数
ylbtech-SQL Server:SQL Server-SQL Server中的时间函数 SQL Server中的时间函数. 1,SQL Server中的时间函数 返回顶部 1. 当前系统日期 ...
- SQL Server中的CLR编程——用.NET为SQL Server编写存储过程和函数
原文:SQL Server中的CLR编程--用.NET为SQL Server编写存储过程和函数 很早就知道可以用.NET为SQL Server2005及以上版本编写存储过程.触发器和存储过程的,不过之 ...
随机推荐
- socket.io 消息发送
socket.io学习笔记 1.服务器信息传输: 2.不分组,数据传输: 3.分组数据传输: 4.Socket.io难点大放送(暂时没有搞定): 服务器信息传输 1. // 发送到当前请求套接字客户端 ...
- Java设计模式:代理模式(转)
代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.这里使用到编程中的一 ...
- osg 加载 fbx文件
#ifdef _WIN32 #include <Windows.h> #endif // _WIN32 #include <osg/Group> #include <os ...
- Linux (Ubuntu)安装ssh
看ssh服务是否启动 打开"终端窗口",输入sudo ps -e |grep ssh 回车有sshd,说明ssh服务已经启动, 如果没有启动,输入sudo service ssh ...
- (十三)过滤器Filter(转)
--------转自孤傲苍狼博客 一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例 ...
- 转载:Spark中文指南(入门篇)-Spark编程模型(一)
原文:https://www.cnblogs.com/miqi1992/p/5621268.html 前言 本章将对Spark做一个简单的介绍,更多教程请参考:Spark教程 本章知识点概括 Apac ...
- 记一次线上由nginx upstream keepalive与http协议"协作"引起的接口报错率飙高事件
年前接到个任务,说要解决线上一些手机客户端接口报错率很高的问题.拿到了监控邮件,粗略一看,各种50%+的错误率,简直触目惊心.这种疑难杂症解决起来还是挺好玩的,于是撸起袖子action. 最终的结果虽 ...
- [Python[CV2]] -- 352: error -- 来自截取图片
今天想用CV2 截个ROI ( Region Of Interest ) 的时候, 是这样写的 结果, 发现是截取img 那句出了错 应该为: 先纵后横 这样就OK了 cv2.selectROI 用法 ...
- 【miscellaneous】基于gstreamer的实时转码
目标是实现一个实时转码,可用于IPTV提供节目源.相关工作在ubuntu操作系统下进行.需要对源代码进行修改的时候,直接采用apt-get source命令获取源代码,根据需要进行修改,然后安装,这样 ...
- 最新 乐游网络java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.乐游网络等10家互联网公司的校招Offer,因为某些自身原因最终选择了乐游网络.6.7月主要是做系统复习.项目复盘.Leet ...
