【发布时间】:2017-07-04 14:54:39
【问题描述】:
我正在尝试从给定的日期字段中获取日期编号和名称。
但结果令人困惑。
比如下面的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
我怎样才能从我的例子中得到这个日期的结果?
【问题讨论】:
-
datename的第二个参数是 DATE,因此 SQL Server 正在将3转换为实际日期。 -
datename(weekday, 3)不会像您认为的那样做。它假定3是实际日期(1900-01-04,因为日期时间中的日期从 1900-01-01 开始),并且该日期是星期四 -
好的,谢谢,那么我怎样才能从日期字段中获取日期?
-
你的意思是
datepart(wk, @date)? -
你是用
datepart做的吗?
标签: sql-server datetime