我正在SQL Server上工作,其中我无法更新任何现有列,也无法向数据添加更多数据/列。
我有一列dttime (yyyy-mm-dd hh:mm:ss)
,其中包含每个条目的日期时间值。 我想选择现有列,以及一个新列作为wd
,当星期几是星期六或星期日时,它将填充为"周末",在其他日期填充为"工作日">
我正在使用以下查询:
SELECT id, total,
case when dayofweek(dttime) in (1,7) then 'Weekend' else 'Weekday' end as wd
from table_name
请建议这里的错误在哪里,或者是否有任何替代方案,以防我有两个以上不同的东西要根据另一列以类似的方式填充。
您可以使用dw
或weekday
的DATENAME
来实现您的期望:
SELECT id, total,
CASE WHEN DATENAME (dw, dttime) IN ('Saturday', 'Sunday') THEN 'Weekend'
ELSE 'Weekday' END AS wd
FROM table_name
此外,一周的第一天也可以由SET DATEFIRST
设置,因此根据 DATEFIRST 设置值,星期日和星期六的整数值可以更改。因此,为dttime
获得DATENAME
不会引起任何混乱。
您可以执行以下查询以更详细地了解,DATENAME
将始终返回当前日期名称,但DATEPART
将根据DATEFIRST
返回。
SELECT @@DATEFIRST AS 'First Day',
DATEPART(dw, GETDATE()) AS 'Today',
DATENAME(dw, GETDATE()) AS 'TodayName';
如果SELECT @@DATEFIRST
返回7
,则可以使用
CASE WHEN DATEPART(dw, dttime) IN (1, 7) THEN 'Weekend' ELSE 'Weekday' END AS wd
这里1
周日,7
周六。
你需要DATEPART
函数。 试试这个:
SELECT id, total,
case when DATEPART(dw,dttime) in (6,7) then 'Weekend' else 'Weekday' end as wd
from table_name
请尝试以下查询
SELECT id, total,
case when DATEPART(dw,dttime) in (1,7) then 'Weekend' else 'Weekday' end as wd
from table_name