SQL SERVER Date列和Time列合并成一列处理报表数据

时间:2022-05-30 03:42:39

问题原由:

intouch项目中,利用intouch脚本来存储数据时,存入的时间格式为:date,time分开存储。在报表需求中,有需要利用查询两个时间段之间的数据。

问题解决:

1.直接写脚本(写出的脚本有bug)

表结构如下:

SQL SERVER Date列和Time列合并成一列处理报表数据

select * from 在线数据日报表
where(convert(char(10),date,120)>='2018-10-30' and time>='18:00:00') 
and (convert(char(10),date,120)<='2018-11-1' and time<='23:00:00')

bu*生的原因:time也是关键字,我想去10.30到11.1之间所有的时间点,因为time位于18:00:00和23:00:00,所以取出来的数为10.30和11.1两天内,18点到23点的所有数据。不符合设想。

2.利用视图整合

没有其他办法,只能将date列和time列整合成为datetime列,然后再进行sql筛选。

2.1新建视图

SQL SERVER Date列和Time列合并成一列处理报表数据

SELECT  CONVERT(varchar(30), date) + ' ' + CONVERT(varchar(30), time) AS datetime1, id, CSLJ
FROM      dbo.在线数据日报表

3.效果测试

select * from 水量计算
where (convert(char(30),datetime1,120)>='2018-10-30 18:00') and (convert(char(30),datetime1,120)<='2018-11-1 23:00')
GO

SQL SERVER Date列和Time列合并成一列处理报表数据

测试基本达到效果,实现两个时间段之间的数据查找。