sql中填补空缺时间,用了master..spt_values表和isnull(),查询出来的结果还是缺了时间,怎么解决?

发布于 2022-09-04 14:46:05 字数 905 浏览 9 评论 0

select b.RecordDate,isnull(view_EN_TagHis.MeterName,'-') MeterName,isnull(view_EN_TagHis.Value,null) Value,isnull(view_EN_Tag.TagName,'-') TagName 
from (
--按照日期范围填补缺失日期
select convert(varchar(23),dateadd(HH,number,'2017-03-06 00:00:00.000'),120) as RecordDate from
master..spt_values
where
datediff(HH,'2017-03-06 00:00:00.000',dateadd(HH,24,'2017-03-06 00:00:00.000'))>=0   
and number>=0 and number<24 and type='p')b
left join view_EN_TagHis
on b.RecordDate = view_EN_TagHis.RecordDate
left join view_EN_Tag
on view_EN_Tag.Guid = view_EN_TagHis.TagGuid
where view_EN_TagHis.BuildName = '博威合金'
and view_EN_TagHis.MeterName = '2#主变'
and view_EN_Tag.TagName = '2#主变高压测电流Ia'
order by b.RecordDate

图片描述

抓取数据时少了9,10,11,12点的数据,但是要求缺的时间数据以“-”填补上。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

何以笙箫默 2022-09-11 14:46:05

RecordDate这个字段的数据类型肯定是datetime类型

而你用ISNULL(date,-)当起为空时,赋值'-',你想想'-'是datetime类型么?

所以这样赋值当然是错误的

如果你对改时间没有什么要求,只要有就行的话

建议这样写ISNULL(date,getdate()) 默认自动获取当前时间

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文