2017-07-04 62 views
0

我正在使用SQL Server,其中我無法更新任何現有列,也無法向數據添加更多數據/列。我有一列dttime (yyyy-mm-dd hh:mm:ss)它由每個條目的日期時間值組成。 我要選擇現有列,和一個新的列wd將在其他日子的情況下被填充爲「週末」當週的日子或者是週六週日和「工作日」根據日期時間在工作日或週末填充SQL Server中的列取決於日期時間

我使用下面的查詢:

SELECT id, total, 
case when dayofweek(dttime) in (1,7) then 'Weekend' else 'Weekday' end as wd 
from table_name 

請建議哪裏是錯在這裏,或有任何替代方案,萬一我有兩個以上的不同的東西以類似的方式來填充的基礎上,另柱。

+1

爲什麼你認爲這是在您的查詢的錯誤呢? – HoneyBadger

+1

@HoneyBadger'dayofweek'在SQL Server中不存在,可能是因爲''dayofweek'不是公認的內置函數名稱而導致錯誤.' – Arulkumar

回答

0

您可以使用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週日的設定值的整數值星期六可以改變。所以dttimeDATENAME不會造成任何混淆。

您可以執行下面的查詢來更詳細地瞭解,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星期六。

0

您需要DATEPART函數。試試這個:

SELECT id, total, 
case when DATEPART(dw,dttime) in (6,7) then 'Weekend' else 'Weekday' end as wd 
from table_name 
0

請嘗試以下查詢

SELECT id, total, 
case when DATEPART(dw,dttime) in (1,7) then 'Weekend' else 'Weekday' end as wd 
from table_name 
相關問題