巧用spt_values解决SQL中的连续日期问题
点击关注上方“SQL数据库开发”,
设为“置顶或星标”,第一时间送达干货
spt_values是什么
spt_values是SQL Server新增的一个系统表,表里面都是一些枚举数据。我们可以通过如下查询语句来查看里面的数据
select * from master..spt_values
select * from master..spt_values where type='P'
SELECT
SUBSTRING(CONVERT(CHAR(32),
DATEADD(HH,number,CONCAT('2021-01-05',' ', '00:00')),120),1,16) AS GroupDay
FROM
master..spt_values
WHERE TYPE = 'P'
AND DATEDIFF(HH,DATEADD(HH,number,
CONCAT('2021-01-05',' ', '00:00')),
CONCAT('2021-01-05',' ', '23:00'))>=0
SELECT
CONVERT(NVARCHAR(10), DATEADD(DAY, number, '2021-01-01'),120) AS GroupDay
FROM
master..spt_values
WHERE TYPE = 'P'
AND number <= DATEDIFF(DAY, '2021-01-01', '2021-01-31')
SELECT
SUBSTRING(CONVERT(NVARCHAR(10), DATEADD(MONTH, number, '2021-01-01'),120),1,7) AS GroupMonth
FROM
master..spt_values
WHERE TYPE = 'P'
AND number <= DATEDIFF(MONTH, '2021-01-01', '2021-12-01')
SELECT DATEADD(DAY, number, CONVERT(DATETIME, '2021-01-01')) [DataTime],
ISNULL(DataValue,0) DataValue
FROM master..spt_values
LEFT JOIN Test
ON DATEADD(DAY, number, CONVERT(DATETIME, '2021-01-01')) = [DataTime]
WHERE type = 'P'
AND number
BETWEEN 0 AND DATEDIFF(DAY, '2021-01-01', DATEADD(MONTH, 1, '2021-01-01'))-1;
我是岳哥,最后给大家分享我写的SQL两件套:《SQL基础知识第二版》和《SQL高级知识第二版》的PDF电子版。里面有各个语法的解释、大量的实例讲解和批注等等,非常通俗易懂,方便大家跟着一起来实操。
有需要的读者可以下载学习,在下面的公众号「数据前线」(非本号)后台回复关键字:SQL,就行
数据前线 ——End——
后台回复关键字:1024,获取一份精心整理的技术干货
后台回复关键字:进群,带你进入高手如云的交流群。
推荐阅读
评论