我只想要一個快速的方法(最好不使用while循環)創建日期@x和日期@y之間的每個日期的表,所以我可以將外部聯接留給某些統計表,其中一些統計表在其間的某些統計表中沒有記錄,從而允許我用缺少的記錄標記0如何獲取在x和y之間的日期表在sql服務器2005
回答
嚴格來說,這並不完全回答你的問題,但它的整潔。
假設你可以指定天數的開始日期後,再使用公共表表達式生活給你:
WITH numbers (n) AS (
SELECT 1 UNION ALL
SELECT 1 + n FROM numbers WHERE n < 500)
SELECT DATEADD(day,n-1,'2008/11/01') FROM numbers
OPTION (MAXRECURSION 500)
Just:WHERE col> start-date AND col < end date date
他試圖創建一個表來做左外連接。這不會做他想做的事。 – 2008-09-18 18:25:08
我相信你正在尋找this blog post。
它很髒,但它做的工作 – digiguru 2008-09-18 18:26:47
它可以移植到其他SQL引擎(包括Server 2000)。 :) – IDisposable 2009-10-19 19:54:24
我認爲你不妨在while循環中做。我知道這很醜陋,但很簡單,它很有效。
我實際上正在做一些類似的事情,但我不能想出一種不使用循環的方式。
我得到的最好的是一張臨時表,然後選擇我想要加入的日期。
博客bduke鏈接到可愛,雖然我認爲臨時表解決方案可能是一個更乾淨的解決方案。
我發現,(它的網站訪問者),那麼這個怎麼樣保存每次約會另一個表...
Declare @FromDate datetime,
@ToDate datetime
Declare @tmpDates table
(StatsDate datetime)
Set @FromDate = DateAdd(day,-30,GetDate())
Set @ToDate = GetDate()
Insert Into @tmpDates (StatsDate)
Select
distinct CAST(FLOOR(CAST(visitDate AS DECIMAL(12, 5))) AS DATETIME)
FROM tbl_visitorstats
Where visitDate between @FromDate And @ToDate
Order By CAST(FLOOR(CAST(visitDate AS DECIMAL(12, 5))) AS DATETIME)
Select * FROM @tmpDates
它不依賴於具有每次約會我的條目其他表想要,但98%可能會有每天的數據。
只要寫循環。有人必須爲此編寫一個循環,無論是你還是SQL Server。
DECLARE @Dates TABLE
(
TheDate datetime PRIMARY KEY
)
DECLARE @StartDate datetime, @EndDate datetime
SELECT @StartDate = '2000-01-01', @EndDate = '2010-01-01'
DECLARE @LoopVar int, @LoopEnd int
SELECT @LoopEnd = DateDiff(dd, @StartDate, @EndDate), @LoopVar = 0
WHILE @LoopVar <= @LoopEnd
BEGIN
INSERT INTO @Dates (TheDate)
SELECT DateAdd(dd,@LoopVar,@StartDate)
SET @LoopVar = @LoopVar + 1
END
SELECT *
FROM @Dates
我會創建一個日曆表,它只包含從合適的開始日期到合適的結束日期的每個日期。這不會佔用您數據庫中的太多空間,並且會使這些類型的查詢變成遊戲。
select ...
from Calendar
left outer join
...
where Calendar.Date >= @x
and Calendar.Date <= @y
作爲https://stackoverflow.com/a/95728/395440給出的答案略有扭曲。允許指定日期並計算到當前日期的範圍。
DECLARE @startDate datetime
SET @startDate = '2015/5/29';
WITH number (n) AS (
SELECT 1 UNION ALL
SELECT 1 + n FROM dates WHERE n < DATEDIFF(Day, @startDate, GETDATE()))
SELECT DATEADD(day,n-1,@startDate) FROM number where
datename(dw, DATEADD(day,n-1,@startDate)) in ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday')
OPTION (MAXRECURSION 500)
- 1. 從Access數據庫中的日期X和日期Y之間獲取記錄?
- 2. Excel日期公式 - 如果在日期x和日期之間y
- 3. 按日期SQL服務器搜索2005
- 4. 從SQL服務器的多個表兩個日期之間獲取記錄
- 5. Delphi7:獲取SQL服務器系統日期和時間格式
- 6. 如何在asp.net中獲取服務器日期/時間
- 7. 獲取DateRange之間的日期部分只sql server 2005
- 8. 如何從服務器獲取日期和時間
- 9. 獲取日期或時間,服務器
- 10. SQL Server 2005簡單查詢獲取兩個日期之間的所有日期
- 11. 在SQL Server日期之間獲取日期的正確方法
- 12. 在SQL服務器中的所述日期之間的日期與空
- 13. 獲取SQL兩個日期之間的日期列表
- 14. 在X日期和Y時間之間顯示Google日曆活動
- 15. 如何獲取兩個日期之間的日期列表?
- 16. 如何獲取SQL 2008中分隔的日期服務器
- 17. 如何獲取日期和日期之間的差異
- 18. 如果數字在X和Y之間
- 19. SQL,基於變量的日期X和X之間的總和
- 20. 獲取星期的開始和結束日期?在Sql服務器?
- 21. 從SQL服務器獲取上次複製日期/時間CE
- 22. 在SQL Server 2005中的日期時間
- 23. 在C#中獲取ESX服務器的日期時間#
- 24. 如何在winform中獲取服務器機器日期?
- 25. 如何在SQL Azure和SQL 2005之間同步表?
- 26. 如何從sql服務器獲取日期
- 27. 檢查日期X是否在JodaTime的日期Y之後
- 28. 如何從日期時間在sql中獲取日期
- 29. 如何在第二時間之後獲取數據_出現在SQL服務器領域2005
- 30. PL/SQL如何從日期作爲日期X日前獲取?
你是一個天才!幹得好,沒有想到使用CTE! – digiguru 2008-09-18 19:26:09