成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

巧用Spt_Values解決SQL中的連續日期問題

運維 數據庫運維
spt_values是SQL Server新增的一個系統表,表里面都是一些枚舉數據。我們可以通過如下查詢語句來查看里面的數據。

[[373719]]

本文轉載自微信公眾號「SQL數據庫」,作者丶平凡世界   。轉載本文請聯系開發公眾號。

spt_values是什么

spt_values是SQL Server新增的一個系統表,表里面都是一些枚舉數據。我們可以通過如下查詢語句來查看里面的數據

  1. select * from master..spt_values 

(因為該表屬于系統數據庫master下面,所以通常在表名前面添加庫名master)

結果為:

(記錄較多,只截取部分記錄)

 

spt_values連續記錄

但是通常我們使用的是Type='P'的數據記錄,這些記錄是一組從0開始,2047為止的連續整數,具體如下:

  1. select * from master..spt_values where type='P' 

結果為:

(記錄較多,只截取部分記錄)

 

我們經常使用的就是number列,通過該列我們可以生成很多連續的記錄,包括連續的日期,例如每天的24小時,每個月的每天,每年的12個月等等。

生成每天的24小時我們只需要指定開始和結束時間,就可以生成該時間段的連續小時了,這里從0點到23點。

  1. SELECT  
  2.   SUBSTRING(CONVERT(CHAR(32), 
  3.   DATEADD(HH,number,CONCAT('2021-01-05',' ''00:00')),120),1,16) AS GroupDay 
  4. FROM 
  5.   master..spt_values  
  6. WHERE TYPE = 'P'  
  7. AND DATEDIFF(HH,DATEADD(HH,number, 
  8. CONCAT('2021-01-05',' ''00:00')), 
  9. CONCAT('2021-01-05',' ''23:00'))>=0 

(提示:可以左右滑動代碼)結果為:

(完整的有24條記錄,這里只截取前幾條)

 

生成每月的每天我們只需要指定開始和結束日期,就可以生成該日期段的連續天了,這里從1月1日到1月31日。

  1. SELECT  
  2.   CONVERT(NVARCHAR(10), DATEADD(DAY, number, '2021-01-01'),120) AS GroupDay 
  3. FROM  
  4.   master..spt_values  
  5. WHERE TYPE = 'P'  
  6.  AND number <= DATEDIFF(DAY'2021-01-01''2021-01-31'

結果為:

(完整的有31條記錄,這里只截取前幾條)

 

生成每年的每月我們只需要指定開始和結束月份,就可以生成該月份段的連續月了,這里從1月到12月。

  1. SELECT  
  2.   SUBSTRING(CONVERT(NVARCHAR(10), DATEADD(MONTH, number, '2021-01-01'),120),1,7) AS GroupMonth 
  3. FROM  
  4.   master..spt_values  
  5. WHERE TYPE = 'P'   
  6. AND number <= DATEDIFF(MONTH'2021-01-01''2021-12-01'

結果為:

 

spt_values應用實例

有如下一張表Test

 

要求:顯示1月份所有日期的DataValue值,如果沒有值的,就顯示為0。

分析:我們數據庫中只存儲了4條數據,這時候我們可以利用SQL的表spt_values來實現。

解法:

  1. SELECT DATEADD(DAY, number, CONVERT(DATETIME, '2021-01-01')) [DataTime], 
  2.        ISNULL(DataValue,0) DataValue 
  3. FROM master..spt_values 
  4.     LEFT JOIN Test 
  5.         ON DATEADD(DAY, number, CONVERT(DATETIME, '2021-01-01')) = [DataTime] 
  6. WHERE type = 'P' 
  7.       AND number 
  8.       BETWEEN 0 AND DATEDIFF(DAY'2021-01-01', DATEADD(MONTH, 1, '2021-01-01'))-1; 

結果為:

 

(完整的有31條記錄,這里只截取前幾條)

 

以上就是spt_values的一些用法,當然它不止在連續日期上的應用,只要是連續數字的問題,均可關聯spt_values來解決。

 

責任編輯:武曉燕 來源: SQL數據庫開發
相關推薦

2011-07-11 09:54:16

DAC登錄觸發器

2018-12-26 09:25:30

SQL ServerSQL語句數據庫

2021-04-06 11:50:30

SQL數據統計

2021-11-03 16:00:40

SQL流量序號

2010-09-24 15:46:23

SQL查詢

2021-03-10 07:20:42

Redis命令數據

2021-08-03 07:40:47

SQL年份語句

2018-05-21 20:58:44

人工智能云服務企業

2011-07-26 15:11:51

安全模式

2011-08-19 10:13:34

SQL Server Values新用途

2010-08-03 09:41:14

GroupSQL Server

2010-09-26 10:35:47

sql替換語句

2010-07-02 09:56:16

2021-12-09 10:35:20

SQL

2012-09-26 10:20:06

數據庫

2024-07-12 08:48:50

2021-01-31 10:51:37

緩存lock數據

2018-12-25 14:40:04

SQL ServerSQL語句數據庫

2010-09-17 10:08:18

SQL中case wh

2010-09-16 17:56:31

SQL server臨
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 九九热精品免费 | 午夜影视| 春色av| 欧美一区永久视频免费观看 | 午夜小视频免费观看 | 中文字幕第5页 | 一区二区三区高清 | 一区二区在线看 | 日韩成人影院在线观看 | 91精品一区| 精精国产xxxx视频在线播放 | 日日做夜夜爽毛片麻豆 | 亚洲va国产日韩欧美精品色婷婷 | 一区在线观看视频 | 亚洲一区二区视频 | 免费黄色片在线观看 | 成人亚洲视频 | 在线观看www视频 | 黑人一级黄色大片 | 欧美国产精品久久久 | 国产美女久久 | 成人久草| 国产精品久久久久久久久久免费看 | 亚洲视频一区二区三区 | 不卡一区二区三区四区 | 国产精品乱码一区二区三区 | 欧美激情一区二区三区 | 久久久精品国产 | 久久99蜜桃综合影院免费观看 | 日韩av电影在线观看 | 91麻豆产精品久久久久久 | 久久久激情视频 | 97精品国产97久久久久久免费 | 91亚洲国产成人久久精品网站 | 精品成人av | 91电影| 欧美日韩91 | 午夜成人在线视频 | 日韩欧美一区二区三区四区 | 欧美三区在线观看 | 一区免费看 |