从SQL中的日期列表中获取星期数

时间:2019-01-18 13:41:11

标签: sql sql-server

我正在尝试从此查询产生的日期中列出相应的星期数。

select Date,Time,EndDate,EndTime
FROM Test
WHERE (StartDate >= '01.01.2019')
ORDER BY StartDate

基本上,我想将此查询的星期数添加到末列。 无论如何,我都无法编辑数据库,我只想从日期中提取星期数,并将其作为结果末尾的一列。

以下示例数据:

Results

6 个答案:

答案 0 :(得分:1)

只需使用datepart函数:

select datepart(week, Date), Date,Time,EndDate,EndTime
FROM Test
WHERE (StartDate >= '01.01.2019')
ORDER BY StartDate

答案 1 :(得分:1)

使用datepart(wk,date):-

select Date,Time,EndDate,EndTime,datepart(wk,date)as week
FROM Test
WHERE (StartDate >= '01.01.2019')
ORDER BY StartDate

答案 2 :(得分:1)

在英国使用ISO周:第一年的一周包括1月4日。

所以:

set datefirst 1 --this sets Monday as first day of the week 
set dateformat dmy -- nosrmal date format
select Date,Time,EndDate,EndTime,datepart(iso_week,date)as week
FROM Test
WHERE (StartDate >= '01.01.2019')
ORDER BY StartDate

请记住,1月的第一天可能是上一年的第52或53周,12月的最后一天也可能属于新年的第一周。

查看周数并推迟到其所属年份的支票如下:

week_and_year = case when datepart(iso_week,date)>=52 and month(date)=1 
                           then concat(year(date)-1,datepart(iso_week,date))
                      when datepart(iso_week,date)=1 and month(date)=12
                           then concat(year(date)+1,datepart(iso_week,date))
                      else concat(year(date),datepart(iso_week,date))
                      end

答案 3 :(得分:0)

SELECT DATEPART(WEEK,GETDATE()-14)
SELECT DATEPART(WEEK,GETDATE()-7)
SELECT DATEPART(WEEK,GETDATE())
SELECT DATEPART(WEEK,GETDATE()+7)
SELECT DATEPART(WEEK,GETDATE()+14)

答案 4 :(得分:0)

如果您使用Vertica,请尝试

 date_part('ISODOW', date) 

'ISODOW'-星期中的ISO,是介于1和7之间的整数,其中星期一是1。

答案 5 :(得分:-1)

我通常使用ROW_NUMBER()函数来完成此操作:

select 
    Date,
    Time,
    EndDate,
    EndTime, 
    ROW_NUMBER() over (partition by year(EndDate), datepart(weekday, EndDate) order by EndDate) as WeekNumInYear
FROM Test
WHERE 
    (StartDate >= '01.01.2019')
ORDER BY 
    StartDate