我正在使用SQL Server,其中我无法更新任何现有列,也无法向数据添加任何其他数据/列。
我有一列dttime (yyyy-mm-dd hh:mm:ss)
,其中包含针对每个条目的日期时间值。
我想选择现有列,并选择一个新列wd
,这些列将填充为“周末”#39;如果星期几是星期六或星期日和'工作日'在其他日子的情况下
我使用以下查询:
SELECT id, total,
case when dayofweek(dttime) in (1,7) then 'Weekend' else 'Weekday' end as wd
from table_name
请在此处建议错误在哪里,或者是否有其他替代方法,以防我根据另一列以类似方式填充两个以上的不同内容。
答案 0 :(得分:1)
您可以使用dw
或weekday
的{{3}}来实现您的期望:
SELECT id, total,
CASE WHEN DATENAME (dw, dttime) IN ('Saturday', 'Sunday') THEN 'Weekend'
ELSE 'Weekday' END AS wd
FROM table_name
也可以通过DATENAME
设置一周的第一天,因此根据DATEFIRST设置值,星期日和星期六的整数值可以更改。因此,DATENAME
获取dttime
不会造成任何混淆。
您可以执行以下查询以详细了解详情,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
。
答案 1 :(得分:0)
您需要DATEPART
功能。试试这个:
SELECT id, total,
case when DATEPART(dw,dttime) in (6,7) then 'Weekend' else 'Weekday' end as wd
from table_name
答案 2 :(得分:0)
请尝试以下查询
SELECT id, total,
case when DATEPART(dw,dttime) in (1,7) then 'Weekend' else 'Weekday' end as wd
from table_name