巧用spt_values解決SQL中的連續(xù)日期問題
點(diǎn)擊關(guān)注上方“SQL數(shù)據(jù)庫開發(fā)”,
設(shè)為“置頂或星標(biāo)”,第一時(shí)間送達(dá)干貨
spt_values是什么
spt_values是SQL Server新增的一個(gè)系統(tǒng)表,表里面都是一些枚舉數(shù)據(jù)。我們可以通過如下查詢語句來查看里面的數(shù)據(jù)
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基礎(chǔ)知識(shí)第二版》和《SQL高級(jí)知識(shí)第二版》的PDF電子版。里面有各個(gè)語法的解釋、大量的實(shí)例講解和批注等等,非常通俗易懂,方便大家跟著一起來實(shí)操。
有需要的讀者可以下載學(xué)習(xí),在下面的公眾號(hào)「數(shù)據(jù)前線」(非本號(hào))后臺(tái)回復(fù)關(guān)鍵字:SQL,就行
數(shù)據(jù)前線 ——End——
后臺(tái)回復(fù)關(guān)鍵字:1024,獲取一份精心整理的技術(shù)干貨
后臺(tái)回復(fù)關(guān)鍵字:進(jìn)群,帶你進(jìn)入高手如云的交流群。
推薦閱讀
評(píng)論
圖片
表情

