Sql-Server

是否可以編寫一個 SELECT 語句來獲取 2 個日期列之間的所有日期?

  • May 15, 2021

我的問題與這兩個問題有關:

  1. https://stackoverflow.com/questions/17529860/how-to-list-all-dates-between-two-dates/27319120
  2. https://stackoverflow.com/questions/1378593/get-a-list-of-dates-between-two-dates-using-a-function

但是在我的情況下,我有一個帶有 ID、StartDate、EndDate 列的表,我想應用相同的方法(但我想使用整個表而不是 2 天)。

在進入函式之前,我想看看這是否可以通過選擇和日期維度表來實現。

基本上我想把它擴展到整個表:

SELECT 
   t.Id
   ,dd.[Date]
FROM dbo.DateDimension dd
   ,dbo.T1 t   
WHERE
   t.Id = 957
   and  dd.Date>=t.StartDate and dd.Date <= t.EndDate 

在此處輸入圖像描述

我在這裡有範例數據 + 所需輸出(選擇語句):

www.sqlfiddle.com /#!18/0e389/2

您的問題中可能有一些我不明白的地方,但從外觀上看,您所要做的就是刪除謂詞t.id = ?您可以通過使用謂詞來縮短查詢BETWEEN,我也更喜歡顯式 JOINS 而不是“,”連接:

SELECT t.Id, dd.[Date]
FROM dbo.DateDimension dd
JOIN dbo.dbse t   
   ON dd.Date BETWEEN t.StartDate and t.EndDate;

在您的小提琴範例中,您輸出 3 個 id。如果您只想要一個子集,您可以使用 IN 謂詞:

SELECT t.Id, dd.[Date]
FROM dbo.DateDimension dd
JOIN dbo.dbse t   
   ON dd.Date BETWEEN t.StartDate and t.EndDate;
WHERE t.id IN (4229, 4268, 4269);    

引用自:https://dba.stackexchange.com/questions/240059