0
所以我試圖在SQL中創建一個日期序列,但是我對腳本有一些限制: 1.它必須以「select」開頭。 2.它不能使用遞歸。 3.它不能使用默認表。如何使用以「select」開頭且不使用缺省表的SQL創建一個日期序列?
原因是它不會在MSSQL中運行,而是在BI工具中運行,它具有類似SQL的語法,但更受限制。
我發現這些解決方案已經:
WITH CTE_DatesTable
AS
(
SELECT CAST('2013-05-20' as datetime) AS [date]
UNION ALL
SELECT DATEADD(dd, 1, [date])
FROM CTE_DatesTable
WHERE DATEADD(dd, 1, [date]) <= '2016-10-18'
)
SELECT date FROM CTE_DatesTable
OPTION (MAXRECURSION 0);
這:
select dateadd(day, number, '2014-1-1')
from
(select distinct number from master.dbo.spt_values
where name is null
) n
where dateadd(day, number, '2014-1-1') < '2017-1-1'
但都違反了限制,所以我不能使用它們。我想過使用第二個,並創建一個與「master.dbo.spt_values」中的列「數字」和「名稱」的表,但此腳本將必須具有相同的限制,所以我幾乎回到原來的問題。
「必須從select開始」是什麼意思?如果你使用的是非標準的查詢語言,我們該如何猜測什麼可以或不可以工作? – Anthony 2015-02-11 08:33:06
「必須以選擇開始」意味着商業智能工具(SiSense)不會以任何以其他方式開頭的查詢。 它不是一種不同的語言,只是一個非常有限的常規SQL版本。 我知道這不是很有幫助,但這是我必須工作,對不起。 – AdamQ 2015-02-11 15:20:08
我最常見到的解決方案令人失望,但非常簡單,只需創建一個包含所有日期範圍內可行需求的表格即可。對於32位Unix時間範圍(1970-2038)中的所有日期,該表將具有約25,000行。 – Anthony 2015-02-11 17:05:44