2012-03-05 73 views
24

給定datetime,有沒有辦法我們知道它恰好是SaturdaySunday如何檢查日期時間恰好是SQL Server 2008中的星期六或星期天

任何想法和建議表示讚賞!

+2

您**確實知道** **完整的** SQL Server文檔**可以在線獲取**並可在[MSDN Books Online]上獲得**(http://msdn.microsoft.com/zh-cn/ us/library/ms130214.aspx) - 對嗎?這裏有一些教程,程序員參考 - 你的名字......大約一次搜索和兩次單擊,你會發現[DATENAME' T-SQL函數的文檔](http://msdn.microsoft.com /en-us/library/ms174395.aspx) – 2012-03-05 16:21:59

+1

@marc_s,FYI Google搜索「sql server weekend」的第二個結果就是這個頁面。通過大約一次搜索和一次點擊,你會發現你的評論。 – user2023861 2016-03-30 13:49:20

+1

@ user2023861:沒關係 - **我支持我的評論**,我完全可以忍受這一點。今天的程序員真的應該首先學習正式的產品文檔,以解決像這樣的基本問題。如果你有一個棘手的問題,可能不包含在產品文檔中 - 那就是你何時應該這樣做 - 但不適用於像這樣的SQL Server 101問題。真的:學會閱讀精彩的手冊和在線文檔! – 2016-03-30 13:57:35

回答

51

很多方法可以做到這,您可以使用DATENAME並檢查實際字符串'Saturday'或'Sunday'

SELECT DATENAME(DW, GETDATE()) 

或者使用一週中的一天和檢查1(星期日)或7(星期六)

SELECT DATEPART(DW, GETDATE()) 
+4

請注意,因爲@@ DATEFIRST(請參閱下面的答案)https://msdn.microsoft.com/de-de/library/ms181598。aspx – Jakob 2015-05-06 10:51:40

+1

注意:使用'SET DATEFIRST 7'確保在美國系統之外工作! – 2016-11-19 21:10:31

3

這將讓你一天的名稱:

SELECT DATENAME(weekday, GETDATE()) 
8
DECLARE @dayNumber INT; 
SET @dayNumber = DATEPART(DW, GETDATE()); 

--Sunday = 1, Saturday = 7. 
IF(@dayNumber = 1 OR @dayNumber = 7) 
    PRINT 'Weekend'; 
ELSE 
    PRINT 'NOT Weekend'; 

這可能會產生錯誤的結果,因爲平日日期部分產生的數取決於由SET DATEFIRST設置的值。這設定了一週中的第一天。 所以另一種方式是:

DECLARE @dayName VARCHAR(9); 
SET @dayName = DATEName(DW, GETDATE()); 

IF(@dayName = 'Saturday' OR @dayName = 'Sunday') 
    PRINT 'Weekend'; 
ELSE 
    PRINT 'NOT Weekend'; 
2

注意:其他的答案只能用英語配置在SQL服務器上工作!使用SET DATEFIRST 7確保DATEPART(DW, ...)週日返回1,週六返回7。

這裏有一個版本是獨立於本地設置的,並且不需要使用:

CREATE FUNCTION [dbo].[fct_IsDateWeekend] (@date DATETIME) 
RETURNS BIT 
AS 
BEGIN 
    RETURN CASE WHEN DATEPART(DW, @date + @@DATEFIRST - 1) > 5 THEN 1 ELSE 0 END; 
END; 

如果你不想使用該功能,只需在您的SELECT語句中使用這樣的:

CASE WHEN DATEPART(DW, YourDateTime + @@DATEFIRST - 1) > 5 THEN 'Weekend' ELSE 'Weekday' END 
0

確定我弄清楚:

DECLARE @dayName VARCHAR(9), @weekenda VARCHAR(9), @free INT 
SET @weekenda =DATENAME(dw,GETDATE()) 

IF (@weekenda='Saturday' OR @weekenda='Sunday') 
SET @free=1 
ELSE 
SET @free=0 

比我使用:.......... OR免費= 1

相關問題