sql 一年的最后一周开始
sql begin end week of year
我无法获取 Sql 服务器中两个日期之间的开始周和结束周?例如:
begin end
2016-04-25 2016-05-01
2016-05-02 2016-05-08
2016-05-09 2016-05-15
2016-05-16 2016-05-22
2016-05-23 2016-05-29
2016-05-30 2016-06-05
...
此致!
SQL 具有用于此目的的 DATEDIFF(datepart,startdate,enddate)
函数。
示例:
SELECT DATEDIFF(day,'2014-06-05','2014-08-05') AS DiffDate
结果
61
了解更多关于 DATEFIFF
here
在 SQL 服务器中使用 DATEDIFF() 函数
您需要约会 table 才能执行此操作
Declare @start_date datetime = '2016-04-25'
@end_date datetime = '2016-06-05'
SELECT Min(dt) AS week_start,
Max(dt) AS week_end
FROM dates_table
WHERE date_col > @start_date
AND date_col < @end_date
GROUP BY Datepart(week, dt),
Year(dt)
ORDER BY Datepart(week, dt),
Year(dt)
要创建日期 table 并填充日期,这里有几个关于在日期范围内生成日期的问题
How to generate a range of dates in SQL Server
Generate Dates between date ranges
试试这个:
DECLARE @d1 DATE = '2016-04-20' , @d2 DATE = '2016-06-07'
, @mon1 DATE
;WITH
sunA AS (
SELECT k=1, dt = @d1, dn = datename(dw,@d1)
UNION ALL
SELECT k=k+1, dt = DATEADD(d,1,dt), dn = datename(dw,DATEADD(d,1,dt))
FROM sunA
WHERE k<7
)
SELECT TOP 1 @mon1 = dt
FROM sunA
WHERE dn = 'Monday'
ORDER BY k
DECLARE @weeks TABLE(d1 DATE, d2 DATE)
WHILE @mon1 >= @d1 AND DATEADD(d, 6, @mon1) <= @d2
BEGIN
INSERT INTO @weeks SELECT @mon1, DATEADD(d, 6, @mon1)
SET @mon1 = DATEADD(d, 7, @mon1)
END
SELECT * FROM @weeks
-- OUTPUT
d1 d2
2016-04-25 2016-05-01
2016-05-02 2016-05-08
2016-05-09 2016-05-15
2016-05-16 2016-05-22
2016-05-23 2016-05-29
2016-05-30 2016-06-05
我无法获取 Sql 服务器中两个日期之间的开始周和结束周?例如:
begin end
2016-04-25 2016-05-01
2016-05-02 2016-05-08
2016-05-09 2016-05-15
2016-05-16 2016-05-22
2016-05-23 2016-05-29
2016-05-30 2016-06-05
...
此致!
SQL 具有用于此目的的 DATEDIFF(datepart,startdate,enddate)
函数。
示例:
SELECT DATEDIFF(day,'2014-06-05','2014-08-05') AS DiffDate
结果
61
了解更多关于 DATEFIFF
here
在 SQL 服务器中使用 DATEDIFF() 函数
您需要约会 table 才能执行此操作
Declare @start_date datetime = '2016-04-25'
@end_date datetime = '2016-06-05'
SELECT Min(dt) AS week_start,
Max(dt) AS week_end
FROM dates_table
WHERE date_col > @start_date
AND date_col < @end_date
GROUP BY Datepart(week, dt),
Year(dt)
ORDER BY Datepart(week, dt),
Year(dt)
要创建日期 table 并填充日期,这里有几个关于在日期范围内生成日期的问题
How to generate a range of dates in SQL Server
Generate Dates between date ranges
试试这个:
DECLARE @d1 DATE = '2016-04-20' , @d2 DATE = '2016-06-07'
, @mon1 DATE
;WITH
sunA AS (
SELECT k=1, dt = @d1, dn = datename(dw,@d1)
UNION ALL
SELECT k=k+1, dt = DATEADD(d,1,dt), dn = datename(dw,DATEADD(d,1,dt))
FROM sunA
WHERE k<7
)
SELECT TOP 1 @mon1 = dt
FROM sunA
WHERE dn = 'Monday'
ORDER BY k
DECLARE @weeks TABLE(d1 DATE, d2 DATE)
WHILE @mon1 >= @d1 AND DATEADD(d, 6, @mon1) <= @d2
BEGIN
INSERT INTO @weeks SELECT @mon1, DATEADD(d, 6, @mon1)
SET @mon1 = DATEADD(d, 7, @mon1)
END
SELECT * FROM @weeks
-- OUTPUT
d1 d2
2016-04-25 2016-05-01
2016-05-02 2016-05-08
2016-05-09 2016-05-15
2016-05-16 2016-05-22
2016-05-23 2016-05-29
2016-05-30 2016-06-05