Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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 server 2008 获取一周的开始和结束日期?在Sql server中?_Sql Server 2008 - Fatal编程技术网

Sql server 2008 获取一周的开始和结束日期?在Sql server中?

Sql server 2008 获取一周的开始和结束日期?在Sql server中?,sql-server-2008,Sql Server 2008,在sql中,如何获取特定月份的开始日期和结束日期。你能帮我吗。要获得每周第一天的使用: select dateadd(wk, datediff(wk, 0, getdate()), 0) 最后一天将是第一天+6: select dateadd(wk, datediff(wk, 0, getdate()), 0) + 6 警告:这是文化敏感的。检查关于 < P>的文件,你的要求不清楚:你认为一周的第一天和最后几天是什么?星期天和星期六?星期一和星期五?星期一和星期天?但是对于许多与日期相关的查

在sql中,如何获取特定月份的开始日期和结束日期。你能帮我吗。

要获得每周第一天的使用:

select dateadd(wk, datediff(wk, 0, getdate()), 0)
最后一天将是第一天+6:

select dateadd(wk, datediff(wk, 0, getdate()), 0) + 6

警告:这是文化敏感的。检查关于

< P>的文件,你的要求不清楚:你认为一周的第一天和最后几天是什么?星期天和星期六?星期一和星期五?星期一和星期天?但是对于许多与日期相关的查询来说,最好的解决方案是创建一个。这使您能够根据自己的定义轻松设置周、月和年的第一天和最后一天,必要时甚至可以使用多种格式

如果您使用的是财政年度、营业日等概念,而这些概念的定义因国家甚至公司而异,则这一点尤其有用。当您的逻辑出现异常时,这也是最简单的解决方案,例如,一年中的第一周与“正常”周有不同的规则

使用日历表,您可以预先填充一周中的第一天和最后一天,然后您的查询可以如下所示:

-- first/last days stored as dates in their own columns
select FirstDayOfThisWeek, LastDayOfThisWeek
from dbo.Calendar
where BaseDate = @SomeDate

-- first/last days stored as bit flags
select max(BaseDate)
from dbo.Calendar
where BaseDate <= @SomeDate and IsFirstDayOfWeek = 0x1
——第一天/最后一天作为日期存储在各自的列中
选择本周的第一天、本周的最后一天
从dbo.Calendar
其中BaseDate=@SomeDate
--第一天/最后一天存储为位标志
选择最大值(基准日期)
从dbo.Calendar

在BaseDATE < P>下面的任何一个工作都会考虑到一周中的第一天(星期日,星期一等),只要确保您使用“代码> >设置DATEAWEST/<代码>,如果您想从默认情况下更改。代码>设置日期优先1
将成为一周的第一天星期一

SELECT  DATEADD(DAY, 1 - DATEPART(WEEKDAY, GETDATE()), CAST(GETDATE() AS DATE)) [WeekStart],
        DATEADD(DAY, 7 - DATEPART(WEEKDAY, GETDATE()), CAST(GETDATE() AS DATE)) [WeekEnd]

编辑

我刚刚重新阅读了您的请求,我想您可能想要的是与我上面给出的不同的东西。如果您想要一周中的第一天和最后一天,这将实现以下技巧:

SELECT  DATENAME(WEEKDAY, DATEADD(DAY, 1 - DATEPART(DAY, GETDATE()), GETDATE())) [FirstDayOfMonth],
        DATENAME(WEEKDAY, DATEADD(DAY, - DATEPART(DAY, DATEADD(MONTH, 1, GETDATE())), DATEADD(MONTH, 1, GETDATE()))) [LastDayOfMonth]
我给你的

周、月、季度、半年、年开始和结束日期

     Select CONVERT(varchar(50), GETDATE(),105) 'GETDATE' ,
       CONVERT(varchar(50), DATEADD(DAY, 2 - DATEPART(WEEKDAY, GETDATE()), CAST(GETDATE() AS DATE)),105) [WeekStart],
CONVERT(varchar(50),DATEADD(DAY, 8 - DATEPART(WEEKDAY, GETDATE()), CAST(GETDATE() AS DATE)) ,105)[WeekEnd],
CONVERT(varchar(50),DATEADD(dd, -DAY(getdate()) + 1, getdate()),105) MonthStart,
CONVERT(varchar(50),DATEADD(dd, -DAY(DATEADD(mm, 1, getdate())), DATEADD(mm, 1, getdate())),105) MonthStart,
CONVERT(varchar(50), DATEADD(q, DATEDIFF(q, 0, GETDATE()), 0),105)  AS 'QStart Date',      
CONVERT(varchar(50), DATEADD(d, -1, DATEADD(q, DATEDIFF(q, 0, GETDATE()) + 1,0)),105) AS 'QEnd Date',
CONVERT(varchar(50), CAST(CAST(((((MONTH(GETDATE()) - 1) / 6) * 6) + 1) AS VARCHAR) + '-1-' + CAST(YEAR(GETDATE()) AS VARCHAR) AS DATETIME),105) StartOfHalfYear,
CONVERT(varchar(50),  CAST(CAST(((((MONTH(GETDATE()) - 1) / 6) * 6) + 6) AS VARCHAR) + '-1-' + CAST(YEAR(GETDATE()) AS VARCHAR) AS DATETIME),105)EndOfHalfYear,
CONVERT(varchar(50), DATEADD(yy, DATEDIFF(yy,0,getdate()), 0),105) AS StartOfYear,
CONVERT(varchar(50), DATEADD(yy, DATEDIFF(yy,0,getdate()) + 1, -1),105) AS EndOfYear

下面是一个案例陈述,您可以使用它为日期值创建一个周基。这将使你的一周从周一、周二或周三开始。。。等等。取决于您设置为@pDate的星期几

创建参数

DECLARE @pDate Date = NULL --Replace with your date, which will also be the first day of the week
DECLARE @pDatePart SMALLINT = DATEPART(dw, @pDate)
然后把这个案例陈述放在你的选择之后

CASE 
    WHEN DATEPART(dw, CAST(DATEVALUE AS DATE)) BETWEEN @pDatePart  AND 7 THEN DATEADD(d, (DATEPART(dw, CAST(DATEVALUE AS DATE))*-1)+@pDatePart, CAST(DATEVALUE AS DATE))
    WHEN DATEPART(dw, CAST(DATEVALUE AS DATE)) BETWEEN 1 AND @pDatePart-1 THEN DATEADD(d, (DATEPART(dw, CAST(DATEVALUE AS DATE))*-1)+(@pDatePart-7), CAST(DATEVALUE AS DATE))
    END
    AS DynamicWeekBegin

您可以随时使用dateadd(d,6,案例陈述)获得本周的最终日期。

谢谢您,Gareth d先生,我知道了,我使用您的查询并添加一些代码,现在就来了。谢谢。