以下是我要解决的问题:
查找2014/12/01上个月同一周的同一天。结果应为2014/11/03。
我的方法是使用以下查询获取原始输入日期2014/12/01的值并将其分解为其组成部分(月 - (1),日名,日值,每周,年) :
我已将SQLFiddle查询放在一起以确定所有输出值:
DECLARE @DATE DATETIME
SET @DATE = '2014-12-01'
SELECT
(month(@date)-1) as 'Month',
datename(dw, @date) as 'Day Name',
datepart(dw, @date) as 'Day Value',
(DATEPART(WEEK, @DATE) - DATEPART(WEEK, DATEADD(MM, DATEDIFF(MM,0,@DATE), 0))+ 1) as 'Week of Month',
year(@date) as 'Year';
此查询的输出如下:
-----------------------------------------------------
Month | Day Name | Day Value | Week of Month | Year |
-----------------------------------------------------
11 | Monday | 2 | 1 | 2014 |
-----------------------------------------------------
我接下来要做的就是把组件部分转回日期时间值,这样我就可以获得' 2014/11/03的解决方案输出。
我正在努力处理这部分请求,因为我无法找到内置函数来转换天名称和星期几对于给定月份到实际日期时间输出。
请帮忙!提前感谢您的反馈意见。
答案 0 :(得分:0)
DECLARE @DATE DATETIME
SET @DATE = '2014-12-01'
;WITH DATES AS
(
SELECT DATEADD(DAY, -40 ,@DATE) AS DateData
UNION ALL
SELECT DATEADD(DAY , 1 ,DateData)
FROM DATES
WHERE DateData < @DATE
)
SELECT *
FROM DATES
WHERE MONTH(DateData) = MONTH(@DATE) - 1
AND FLOOR((DAY(DateData)-1)/7)+1 = FLOOR((DAY(@DATE)-1)/7)+1
AND DATEPART(WEEKDAY,DateData) = DATEPART(WEEKDAY,@Date)
2014-11-03 00:00:00.000