按工作日或周末填充SQL Server中的列,具体取决于日期时间

时间:2017-07-04 07:22:14

标签: sql-server select case

我正在使用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

请在此处建议错误在哪里,或者是否有其他替代方法,以防我根据另一列以类似方式填充两个以上的不同内容。

3 个答案:

答案 0 :(得分:1)

您可以使用dwweekday的{​​{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