根据日期时间按工作日或周末填充 SQL Server 中的列



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

请建议这里的错误在哪里,或者是否有任何替代方案,以防我有两个以上不同的东西要根据另一列以类似的方式填充。

您可以使用dwweekdayDATENAME来实现您的期望:

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

最新更新