我正在使用SQL Server,該場景是查找當天的前一年的當天日期。查找今年的前一年的同一天SQL Server中的日期
假設2014年3月6日是今天的日期和日是週四我想找到當天在以前的謊言在同一個星期。其中的2013年3月7日
能任何身體幫助? 這裏是我所寫的內容:
DECLARE @DateFrom AS DATETIME
DECLARE @DateTo AS DATETIME
SET @DateFrom = '2014-01-01'
SET @DateTo = '2014-02-10'
DECLARE @Count AS INT
SET @Count = DATEDIFF(DAY, @DateFrom, @DateTo)
CREATE TABLE #current_year /*This Year*/
(
[Date] DATETIME ,
WeekNum INT,
[Day] VARCHAR(20),
Data INT
)
CREATE TABLE #last_year /*This Year -1*/
(
[Date] DATETIME ,
WeekNum INT,
[Day] VARCHAR(20),
Data INT
)
WHILE (@Count > 0)
BEGIN
INSERT INTO #current_year
VALUES (CONVERT(VARCHAR(10), @DateFrom, 101),
DATEPART(week,@DateFrom),
DATENAME(weekday, @DateFrom),@Count)
INSERT INTO #last_year
VALUES (CONVERT(VARCHAR(10), DATEADD(YEAR, -1, @DateFrom), 101),
DATEPART(week,DATEADD(YEAR,1,@DateFrom)),
DATENAME(weekday, DATEADD(YEAR, -1, @DateFrom)),@Count)
SET @DateFrom = DATEADD(day, 1, @DateFrom)
SET @Count = @Count - 1
END
SELECT * from #current_year
SELECT * from #last_year
SELECT CONVERT(varchar(10),#current_year.[Date],111) AS CYDate,
--ISNULL(CONVERT(varchar(10),#last_year.[Date],111) ,/*CONVERT(varchar(10),DateAdd(dd, 1, DATEADD(yy, -1, #current_year.Date)),111)*/) AS LYDate
--CONVERT(varchar(10),#last_year.[Date],111) AS LYDate
Coalesce(CONVERT(varchar(10),#last_year.[Date],111) ,DateAdd(dd, 1, DATEADD(yy, -1, #current_year.Date))) AS LYDate,
#current_year.Data AS CD,
#last_year.Data AS LD
FROM #current_year
--LEFT JOIN #last_year ON #last_year.WeekNum = #current_year.WeekNum
-- AND #last_year.[Day] = #current_year.[Day]
Left JOIN #last_year ON #last_year.WeekNum = DatePart(wk, GETDATE())
DROP TABLE #current_year
DROP TABLE #last_year
這裏是輸出:
這裏是加入您的解決方案後的輸出,現在在左連接它排除上年
我們怎麼知道任何特定週四是否是我們想要的嗎?即如果今天是'2014-03-07',星期五,我們想要獲得'2013-03-01'還是'2013-03-08'?根據你的定義,可能會有很多邊緣案例,基於幾個月的開始和結束以及可能的閏年可能是一個因素。定義前一年「同一周」的某個特定星期的具體情況。 –