Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当前月份和周的SQL_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

当前月份和周的SQL

当前月份和周的SQL,sql,sql-server,sql-server-2008,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,

我需要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')
但问题是week给了我从周一到周一的周日期,而月末给了我下个月开始的截止日期(20160801)

结果应该是

Week from 20160710 to 20160716
Month from 20160701 to 20160731
请帮我更正。

--月初一

select replace(cast(dateadd(mm,datediff(mm,0,getdate()),0) as date),'-','')
--月底

select replace(cast(dateadd(mm,datediff(mm,0,getdate())+1,0)-1 as date),'-','')
--在SQL 2012及更高版本中

select replace(eomonth(getdate()),'-','');
--一周的开始日

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),'-','')
--周末

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),'-','')

一周的第一天由
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 ))

使用
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))

我们可以不用SET@Today Date=GETDATE()SET DATEFIRST 7--SundayYes,第一个SET是一个复制粘贴条-删除它…DATEFIRST是控制一周的第一天的,Mon=1,Tues=2等等你可以像网上很多解决方案一样从第0天开始DATEDIFF,但这些都是基于19000101是星期一的巧合。不同的地区有不同的一周的第一天。您能否编辑查询并使其以INT格式yyyyMMdd返回,而不使用任何设置的DATEFIRST 7等?