我需要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
请帮我纠正。
答案 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)
如何使用DATEPART
,DateAdd
和DateDiff
函数:
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))