Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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 按周或年获取日期_Sql Server_Vb.net_Datetime - Fatal编程技术网

Sql server 按周或年获取日期

Sql server 按周或年获取日期,sql-server,vb.net,datetime,Sql Server,Vb.net,Datetime,我需要一年中特定周数的周开始日期和周结束日期(vb.net或SQL Server) 例如,如果weeknumber=1和year 2009,我应该得到: 起始日期=1/1/2009 截止日期=1/3/2009 如果weeknumber=2且为2009年,则: 起始日期=1/4/2009 截止日期=1/10/2009 实际上,我通过在查询中使用datepart(wk,Date)得到了周数,然后我按周数分组。现在我需要分组周数的开始日期和结束日期 -- 拉希尔你在找这样的东西吗: Dim day A

我需要一年中特定周数的周开始日期和周结束日期(vb.net或SQL Server)

例如,如果weeknumber=1和year 2009,我应该得到:

起始日期=1/1/2009 截止日期=1/3/2009

如果weeknumber=2且为2009年,则:

起始日期=1/4/2009 截止日期=1/10/2009

实际上,我通过在查询中使用datepart(wk,Date)得到了周数,然后我按周数分组。现在我需要分组周数的开始日期和结束日期

--
拉希尔

你在找这样的东西吗:

Dim day As DayOfWeek = DateTime.Now.DayOfWeek
Dim days As Integer = day - DayOfWeek.Monday
Dim startDate As DateTime = DateTime.Now.AddDays(-days)
Dim endDate As DateTime = startDate.AddDays(6)

当然,你可以改变它,让一周从你认为应该的任何一天开始(太阳、周一?)

你在找这样的事情吗:

Dim day As DayOfWeek = DateTime.Now.DayOfWeek
Dim days As Integer = day - DayOfWeek.Monday
Dim startDate As DateTime = DateTime.Now.AddDays(-days)
Dim endDate As DateTime = startDate.AddDays(6)

当然,你可以改变它,让一周从你认为应该的任何一天开始(太阳,周一?

这可能值得考虑一个。

这可能值得考虑一个。

是的,一周从哪一天开始?星期天,还是星期一

datepart(dw,date)返回一周中的某一天(1到7),但“工作日datepart生成的数字取决于set DATEFIRST设置的值,该值设置了一周中的第一天。”

但如果数据库设置正确,它将返回正确的结果

好的,如果它返回1,我们在第一天,或者更一般地说,第一天是

1-日期部分(dw,日期)在我们的日期之前的天

如果它返回7,我们是在一周的最后一天,或者更一般地说,是最后一天

日期部分(dw,日期)在我们的日期后7天

我们使用dateadd(dd,n,date)从日期算起n天,因此:

select
 date_column, 
 datepart(wk, date_column ) as week_number, 
 dateadd( dd, 1 - datepart( dw, date_column ),date_column ) as week_start, 
 dateadd( dd, 7 - datepart( dw, date_column ), date_column ) as week_end
from table ;
给我们所需要的


请注意,一年中第一周的第一天晚上是在上一个日历年中,因为根据定义,一周开始于(星期日或星期一或您设定的任何日期),但一年可以从一周中的任何一天开始。同样,一年中最后一周的最后一天可能在下一个日历年。

是的,一周从哪一天开始?星期天,还是星期一

datepart(dw,date)返回一周中的某一天(1到7),但“工作日datepart生成的数字取决于set DATEFIRST设置的值,该值设置了一周中的第一天。”

但如果数据库设置正确,它将返回正确的结果

好的,如果它返回1,我们在第一天,或者更一般地说,第一天是

1-日期部分(dw,日期)在我们的日期之前的天

如果它返回7,我们是在一周的最后一天,或者更一般地说,是最后一天

日期部分(dw,日期)在我们的日期后7天

我们使用dateadd(dd,n,date)从日期算起n天,因此:

select
 date_column, 
 datepart(wk, date_column ) as week_number, 
 dateadd( dd, 1 - datepart( dw, date_column ),date_column ) as week_start, 
 dateadd( dd, 7 - datepart( dw, date_column ), date_column ) as week_end
from table ;
给我们所需要的

请注意,一年中第一周的第一天晚上是在上一个日历年中,因为根据定义,一周开始于(星期日或星期一或您设定的任何日期),但一年可以从一周中的任何一天开始。类似地,一年中最后一周的最后一天可能在下一个日历年。

尝试以下TSQL:

DECLARE @Year int
DECLARE @WeekNo int
SET @Year = 2009
SET @WeekNo = 1

DECLARE @DaysInWeekOne int
DECLARE @FirstOfJan smalldatetime
DECLARE @ThirtyFirstOfDec smalldatetime
DECLARE @StartDateDayOfYear int
DECLARE @EndDateDayOfYear int

--GET THE START AND END OF THE YEAR
SELECT
    @ThirtyFirstOfDec = Cast(('12/31/' + Cast(@Year as varchar)) as smalldatetime)
,   @FirstOfJan = Cast(('01/01/' + Cast(@Year as varchar)) as smalldatetime)

--GET THE AMOUNT OF DAYS IN WEEK ONE
SELECT
    @DaysInWeekOne = 7 - (DatePart(dw, @FirstOfJan) - 1)

--GET THE START AND END DAYOFYEAR VALUES FOR THE GIVEN WEEK
SELECT
    @StartDateDayOfYear = CASE WHEN ((@WeekNo-1)*7)-(7-@DaysInWeekOne) < 0 THEN 0 ELSE ((@WeekNo-1)*7)-(7-@DaysInWeekOne) END
,   @EndDateDayOfYear = ((@WeekNo-1)*7)-(7-@DaysInWeekOne) + 6

--SELECT THE START DATE AND END DATE MAKING SURE IF THE COUNT RUNS OVER THE YEAR THAT WE SHOW THE 31/12
SELECT
    @Year As mYear
,   @WeekNo As WeekNo
,   dateadd(dd, @StartDateDayOfYear, (@FirstOfJan)) As StartDate
,   CASE 
        WHEN dateadd(dd, @EndDateDayOfYear,   (@FirstOfJan)) > @ThirtyFirstOfDec THEN @ThirtyFirstOfDec 
        ELSE dateadd(dd, @EndDateDayOfYear, @FirstOfJan) 
    END As EndDate
DECLARE@Year int
声明@WeekNo int
设置@Year=2009
设置@WeekNo=1
声明@DaysInWeekOne int
声明@FirstOfJan smalldatetime
声明@ThirtyFirstOfDec smalldatetime
声明@StartDateOfYear int
声明@EndDateDayOfYear int
--了解今年的开始和结束
挑选
@ThirtyFirstOfDec=以smalldatetime的形式进行转换('12/31/'+转换(@Year as varchar)))
,@FirstOfJan=Cast('01/01/'+Cast(@Year as varchar))作为smalldatetime)
--获取第一周的天数
挑选
@DaysInWeekOne=7-(DatePart(dw,一月一日)-1)
--获取给定周的开始和结束日期值
挑选
@StartDateDayOfYear=当((@WeekNo-1)*7)-(7-@DaysInWeekOne)<0时,则其他0((@WeekNo-1)*7)-(7-@DaysInWeekOne)结束
,@EndDateDayOfYear=((@WeekNo-1)*7)-(7-@DaysInWeekOne)+6
--选择开始日期和结束日期,确保计数是否在我们显示的31/12年度内运行
挑选
@作为mYear的一年
,@WeekNo作为WeekNo
,dateadd(dd,@StartDateDayOfYear,(@FirstOfJan))作为StartDate
案例
当dateadd(dd,@EndDateDayOfYear,(@FirstOfJan))>ThirtyFirstOfDec时,则为@ThirtyFirstOfDec
ELSE dateadd(dd,@EndDateDayOfYear,@FirstOfJan)
结束为结束日期
试试这个TSQL:

DECLARE @Year int
DECLARE @WeekNo int
SET @Year = 2009
SET @WeekNo = 1

DECLARE @DaysInWeekOne int
DECLARE @FirstOfJan smalldatetime
DECLARE @ThirtyFirstOfDec smalldatetime
DECLARE @StartDateDayOfYear int
DECLARE @EndDateDayOfYear int

--GET THE START AND END OF THE YEAR
SELECT
    @ThirtyFirstOfDec = Cast(('12/31/' + Cast(@Year as varchar)) as smalldatetime)
,   @FirstOfJan = Cast(('01/01/' + Cast(@Year as varchar)) as smalldatetime)

--GET THE AMOUNT OF DAYS IN WEEK ONE
SELECT
    @DaysInWeekOne = 7 - (DatePart(dw, @FirstOfJan) - 1)

--GET THE START AND END DAYOFYEAR VALUES FOR THE GIVEN WEEK
SELECT
    @StartDateDayOfYear = CASE WHEN ((@WeekNo-1)*7)-(7-@DaysInWeekOne) < 0 THEN 0 ELSE ((@WeekNo-1)*7)-(7-@DaysInWeekOne) END
,   @EndDateDayOfYear = ((@WeekNo-1)*7)-(7-@DaysInWeekOne) + 6

--SELECT THE START DATE AND END DATE MAKING SURE IF THE COUNT RUNS OVER THE YEAR THAT WE SHOW THE 31/12
SELECT
    @Year As mYear
,   @WeekNo As WeekNo
,   dateadd(dd, @StartDateDayOfYear, (@FirstOfJan)) As StartDate
,   CASE 
        WHEN dateadd(dd, @EndDateDayOfYear,   (@FirstOfJan)) > @ThirtyFirstOfDec THEN @ThirtyFirstOfDec 
        ELSE dateadd(dd, @EndDateDayOfYear, @FirstOfJan) 
    END As EndDate
DECLARE@Year int
声明@WeekNo int
设置@Year=2009
设置@WeekNo=1
声明@DaysInWeekOne int
声明@FirstOfJan smalldatetime
声明@ThirtyFirstOfDec smalldatetime
声明@StartDateOfYear int
声明@EndDateDayOfYear int
--了解今年的开始和结束
挑选
@ThirtyFirstOfDec=以smalldatetime的形式进行转换('12/31/'+转换(@Year as varchar)))
,@FirstOfJan=Cast('01/01/'+Cast(@Year as varchar))作为smalldatetime)
--获取第一周的天数
挑选
@DaysInWeekOne=7-(DatePart(dw,一月一日)-1)
--获取给定周的开始和结束日期值
挑选
@StartDateDayOfYear=当((@WeekNo-1)*7)-(7-@DaysInWeekOne)<0时,则其他0((@WeekNo-1)*7)-(7-@DaysInWeekOne)结束
,@EndDateDayOfYear=((@WeekNo-1)*7)-(7-@DaysInWeekOne)+6
--选择开始日期和结束日期,确保计数是否在我们显示的31/12年度内运行
挑选
@作为mYear的一年
,@WeekNo作为WeekNo
,dateadd(dd,@StartDateDayOfYear,(@FirstOfJan))作为StartDate
案例
当dateadd(dd,@EndDateDayOfYear,(@FirstOfJan))>ThirtyFirstOfDec时,则为@ThirtyFirstOfDec
ELSE dateadd(dd,@EndDateDayOfYear,@FirstOfJan)
结束为结束日期