当前月份和周的SQL

时间:2016-07-11 07:59:32

标签: sql sql-server sql-server-2008

我需要SQL以yyyyMMdd格式获取当前月份的开始和结束时间(当月的1个月到当月的28/30/31)以及周,但周应该是周日到周六

我用了周开始日期

SELECT CONVERT(INT, CONVERT(VARCHAR(8), DATEADD(WEEK, DATEDIFF(WEEK, 0,   SYSDATETIME()), 0), 112)

周末日期

SELECT CONVERT(INT, CONVERT(VARCHAR(8), DATEADD(WEEK, DATEDIFF(WEEK, 0, SYSDATETIME()) + 1, 0), 112))

月开始

SELECT CONVERT(INT, CONVERT(VARCHAR(6), SYSDATETIME(), 112) + '01')

月末

SELECT CONVERT(INT, CONVERT(VARCHAR(6), DATEADD(MONTH, 1, SYSDATETIME()), 112) + '01')

但是问题是周是给我一周日从星期一到星期一,月末日给我一个月的开始日期(20160801)

结果应为

Week from 20160710 to 20160716
Month from 20160701 to 20160731

请帮我纠正。

3 个答案:

答案 0 :(得分:1)

- 开始日期

select replace(cast(dateadd(mm,datediff(mm,0,getdate())+1,0)-1 as date),'-','')

- 月末结束日

select replace(eomonth(getdate()),'-','');

- 在SQL 2012及更高版本中

select replace(cast(dateadd(ww,datediff(ww,0,getdate()),0)-1 as date),'-','')

- 开始星期几

select replace(cast(dateadd(ww,datediff(ww,0,getdate())+1,0)-2 as date),'-','')

- 一周结束日

{{1}}

答案 1 :(得分:1)

一周的第一天由DATEFIRST控制。以下是如何根据当前DATEFIRST设置以及当月的第一天和最后一天计算一周的第一天。

SET DATEFIRST 7 --Sunday
-- Start/End of Weeks respecting DATEFIRST
SELECT 
  DATEADD(DAY,  1-DATEPART(WEEKDAY, GETDATE()), GETDATE()) FirstDayOfCurrentWeek,
  DATEADD(DAY,  7-DATEPART(WEEKDAY, GETDATE()), GETDATE()) LastDayOfCurrentWeek,
  DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE()),0) FirstDayOfMonth,
  DATEADD(DAY, -1, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + 1, 0)) LastDayOfMonth

要将日期转换为ISO 8601,请使用

CONVERT(INT, CONVERT( VARCHAR, SomeDate, 112 ))

答案 2 :(得分:1)

如何使用DATEPARTDateAddDateDiff函数:

SELECT CONVERT(INT, CONVERT(VARCHAR(8),  DateAdd(d, 7 - DatePart(dw, getdate()), getdate()), 112))

和本月:

SELECT CONVERT(INT, CONVERT(VARCHAR(8), DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0)), 112))