为什么DatePart和DateName在同一日期返回不同的值?

时间:2017-07-04 14:54:40

标签: sql-server datetime

我正在尝试从给定的日期字段中获取日期编号和名称 但结果令人困惑 例如以下sql:

declare @date date = '20161018'

select datepart(dw, @date) as daynumber,
       datename(weekday, @date) as DayName,
       datename(weekday, 3) as DayNumber3,
       datename(weekday, 1) as DayNumber1

它产生了这个结果:

daynumber   DayName     DayNumber3    DayNumber1    
3           Tuesday     Thursday      Tuesday   

正如您所看到的,datepart返回3,当我在datename调用中使用此datepart时,它返回Tuesday
但是当我使用数字3直接调用datepart时,它返回Thursday,当我使用数字1直接调用datepart时,它返回Tuesday

那么为什么datepart(dw, @date)返回3而不是1,而datename(weekday, @date)确实返回正确的日期名称?

对我来说,重要的是得到1而不是3,并且在这个日期仍然保持到星期二。

修改
我想要的输出是' 20161018'是

daynumber    DayName
1            Tuesday

如何从我的示例中获取该日期的结果?

1 个答案:

答案 0 :(得分:1)

我认为你可以添加5和mod 7将获得如下结果:

Declare @date date = '20161018'

Select (datepart(dw, @date) + 5) % 7 as daynumber,
   datename(weekday, @date) as DayName,
   datename(weekday, 3) as DayNumber3,
   datename(weekday, 1) as DayNumber1