SQL Server 日期函数CAST 和 CONVERT 以及在业务中的使
网络编程 2021-07-05 13:42www.168986.cn编程入门
。最近时间刚从客户端转入后台写服务,对于后台数据库以及服务的书写完全是个小白,所以最近写的肯定没有太多技术含量
最近时间刚从客户端转入后台写服务,对于后台数据库以及服务的书写完全是个小白,所以最近写的肯定没有太多技术含量。
把遇到的问题摆出来还是那张错误上报表,字段主要有上报错误ID(ErrorID),上报人(ReportPerson),上报时间(ReportTime)精确到毫秒,现在要做的统计是(1)统计一定时间内【起止时间精确到毫秒】(beginTime,endTime)每个人每天上报的错误个数(2)统计一定时间内【起止时间到精确到月】(beginTime,endTime)按月统计每个人上报的错误总数。
看到问题想到的是要group by ReportPerson,能将每个人的统计数据计算出来,还没达到要求,还需要获得每个人每天的统计数据,对于我这样的菜鸟来说就有点麻烦了,不知道该怎么下手了,在sql群里找了个高手,告诉需要把规定一下时间格式,然后把时间格式限定到天和月,这两个问题就解决了。
上篇已经将多个时间函数罗列了出来,现在就本文章中用到的CAST 和 CONVERT详细介绍一下
先看一下他们的语法
CAST ( expression AS data_type [ ( length ) ] )
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
其中
expression 任何有效的表达式。
data_type 目标数据类型。 这包括 xml、bigint 和 sql_variant。 不能使用别名数据类型。
length 指定目标数据类型长度的可选整数。 默认值为 30。
style 指定 CONVERT 函数如何转换 expression 的整数表达式。 如果样式为 NULL,则返回 NULL。 该范围是由 data_type 确定的。
和本文相关的主要是length和expression,length是指目标类型的长度,用于限制时间的精度,expression是用来限定输出时间的格式例如yyyy/mm/dd/yyyy-mm-dd等。
express的相关的知识以及举例使用可参考下这篇博文
现在就用这些知识解决我的我的问题,是按日统计上报量,精确到日 时间限制为CONVERT(varchar(11) , ReportTime , 20 ) 即yyyy-mm-dd
然后利用group by 问题就得到了解决,sql 代码为
select ReportPerson,CONVERT(varchar(11) , ReportTime , 20 ) as 'ReporTime', count() as reportTotal from PCR_ConstructInfo where (ReportTime>'2012-11-15 12:11:12.23')and (ReportTime<'2013-1-16 12:11:12.23') group by ReportPerson,CONVERT(varchar(11) , ReportTime , 20 )
执行结果为
还有一个问题是按月统计每个人上报错误量的统计,只要将时间日期限定到月就好了,即CONVERT(varchar(7) , ReportTime , 20 ) yyyy-mm 执行sql语句为
select ReportPerson,CONVERT(varchar(7) , ReportTime , 20 ) as 'ReportTime', count() as reportTotal from PCR_ConstructInfo where (ReportTime>'2012-11-1')and (ReportTime<'2013-2-1') group by ReportPerson,CONVERT(varchar(7) , ReportTime , 20 )
执行结果为
好了,今天就到此为止吧,如果哪位大师有更好的方法,欢迎留言!!!
把遇到的问题摆出来还是那张错误上报表,字段主要有上报错误ID(ErrorID),上报人(ReportPerson),上报时间(ReportTime)精确到毫秒,现在要做的统计是(1)统计一定时间内【起止时间精确到毫秒】(beginTime,endTime)每个人每天上报的错误个数(2)统计一定时间内【起止时间到精确到月】(beginTime,endTime)按月统计每个人上报的错误总数。
看到问题想到的是要group by ReportPerson,能将每个人的统计数据计算出来,还没达到要求,还需要获得每个人每天的统计数据,对于我这样的菜鸟来说就有点麻烦了,不知道该怎么下手了,在sql群里找了个高手,告诉需要把规定一下时间格式,然后把时间格式限定到天和月,这两个问题就解决了。
上篇已经将多个时间函数罗列了出来,现在就本文章中用到的CAST 和 CONVERT详细介绍一下
先看一下他们的语法
CAST ( expression AS data_type [ ( length ) ] )
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
其中
expression 任何有效的表达式。
data_type 目标数据类型。 这包括 xml、bigint 和 sql_variant。 不能使用别名数据类型。
length 指定目标数据类型长度的可选整数。 默认值为 30。
style 指定 CONVERT 函数如何转换 expression 的整数表达式。 如果样式为 NULL,则返回 NULL。 该范围是由 data_type 确定的。
和本文相关的主要是length和expression,length是指目标类型的长度,用于限制时间的精度,expression是用来限定输出时间的格式例如yyyy/mm/dd/yyyy-mm-dd等。
express的相关的知识以及举例使用可参考下这篇博文
现在就用这些知识解决我的我的问题,是按日统计上报量,精确到日 时间限制为CONVERT(varchar(11) , ReportTime , 20 ) 即yyyy-mm-dd
然后利用group by 问题就得到了解决,sql 代码为
代码如下:
select ReportPerson,CONVERT(varchar(11) , ReportTime , 20 ) as 'ReporTime', count() as reportTotal from PCR_ConstructInfo where (ReportTime>'2012-11-15 12:11:12.23')and (ReportTime<'2013-1-16 12:11:12.23') group by ReportPerson,CONVERT(varchar(11) , ReportTime , 20 )
执行结果为
还有一个问题是按月统计每个人上报错误量的统计,只要将时间日期限定到月就好了,即CONVERT(varchar(7) , ReportTime , 20 ) yyyy-mm 执行sql语句为
代码如下:
select ReportPerson,CONVERT(varchar(7) , ReportTime , 20 ) as 'ReportTime', count() as reportTotal from PCR_ConstructInfo where (ReportTime>'2012-11-1')and (ReportTime<'2013-2-1') group by ReportPerson,CONVERT(varchar(7) , ReportTime , 20 )
执行结果为
好了,今天就到此为止吧,如果哪位大师有更好的方法,欢迎留言!!!
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程