2015-08-21 56 views
1

如果日期是t-SQL中的if語句中的某個工作日,是否有更簡潔的方法?如果日期是在sql服務器中的工作日,那麼計算

我想要的東西比低於

if ((DATENAME(WEEKDAY, @date) = 'Monday' or DATENAME(WEEKDAY, @date) = 'Tuesday' or DATENAME(WEEKDAY, @date) = 'Wednesday' or DATENAME(WEEKDAY, @date) = 'Thursday' or DATENAME(WEEKDAY, @date) = 'Friday')) 
    --do something 
+2

檢查它不是週六或週日? –

+0

無論設置有效,您是否需要可靠工作的東西?因爲你現在的例子依賴於語言設置。其他解決方案可能依賴datefirst設置等 –

+0

節假日呢? (即比星期六和星期日的其他非工作日) – jarlh

回答

1

更簡潔如果您使用英國/美國標準DATEFIRST(默認)設置

使用WEEKDAY功能

CASE WHEN WEEKDAY(@date) BETWEEN 2 AND 6 THEN @dosomething ELSE 'WEEKEND' END 
+1

這隻適用於特定的'DATEFIRST'設置。例如。 'SET DATEFIRST 4',然後運行上面的'20150822'報告說,這不是一個週末。 –

+0

它與標準(英國/美國)'DATEFIRST'設置(7)一起工作,我可以想象用戶正在使用那裏的NI。無論如何我更新了我的答案以澄清。 – Matt

+0

但是,SO的目標是成爲一個好的問答網站,不僅僅是爲了OP和他們的直接問題,而且也是未來的訪問者。你認爲假設所有未來訪問者都來自NI嗎? –

1

您可以檢查相反:如果是週末的話。

select case when datename(weekday, getdate()) not in ('Saturday', 'Sunday') then 1 end weedayBoolean 
0

工作有點像以前的答案,但依靠這兩種語言都不也不datefirst設置:

select 
    CASE WHEN DATEPART(weekday,@date) in (
     DATEPART(weekday,'20150822'), --"Known good" Saturday 
     DATEPART(weekday,'20150503') --"Known good" Sunday 
    ) THEN 'Weekend' 
    ELSE 'Weekday' 
    END 
+0

如果SO的要點是一個完美的問答網站,那麼將考慮[週末](https://en.wikipedia.org/wiki/Workweek_and_weekend)的所有文化定義。未來的訪問者可能仍然會發現新的文化,國會法案,微軟營銷決策和其他干預事件已經改變了問題和答案的適用性。我們是否同意接受不符合[Aaron Betrand條款](http://stackoverflow.com/questions/19309179/subtraction-of-two-dates-in-t-sql/19324609#19324609)標準的答案? – HABO

+0

@HABO - 我希望我們至少可以同意,記錄任何假設的答案都好於某些人會失敗的答案,並讓他們努力發現問題? –