我有我的Oracle数据库运行下面的查询,我想有一个SQL Server 2008数据库相当于:帮忙翻译从Oracle的PL/SQL本周查询到SQL Server 2008
SELECT TRUNC(/* Midnight Sunday */
NEXT_DAY(SYSDATE, 'SUN') - (7*LEVEL)
) AS week_start,
TRUNC(/* 23:59:59 Saturday */
NEXT_DAY(NEXT_DAY(SYSDATE, 'SUN') - (7*LEVEL), 'SAT') + 1
) - (1/(60*24)) + (59/(60*60*24)) AS week_end
FROM DUAL
CONNECT BY LEVEL <= 4 /* Get the past 4 weeks */
什么查询所做的是获得本周的开始和最后4周的本周结束。周数是任意的,应该在我想要的SQL Server查询中轻松修改。它产生的数据如下所示:
WEEK_START WEEK_END
2010-03-07 00:00:00 2010-03-13 23:59:59
2010-02-28 00:00:00 2010-03-06 23:59:59
...
我目前停留在翻译的部分是CONNECT BY LEVEL
因为它似乎SQL Server 2008不具有等同的。我宁愿简单地调整一条线,如CONNECT BY LEVEL <= 4
,并让查询生成更多或更少的周(即,我不想调整多个UNION ALL
声明)。
编辑:这里是我迄今为止获取当前一周的开始和结束:
SELECT week_start,
DATEADD(SECOND, -1, DATEADD(DAY, 7, week_start)) AS week_end
FROM (
SELECT CAST(
CONVERT(
VARCHAR(10),
DATEADD(DAY, 1-DATEPART(DW, GETDATE()), GETDATE()),
111
) AS DATETIME
) AS week_start
) AS week_start_view
我不介意,如果查询显示当前周的开始和结束日期,或者如果它在前一周开始。
+1:荣誉!我会更新我的,所以我没有错。 – 2010-03-10 20:55:12