Câu hỏi Cách kiểm tra xem datetime có xảy ra vào thứ Bảy hoặc Chủ Nhật trong SQL Server 2008 hay không


Đưa ra datetime, có cách nào chúng ta có thể biết nó xảy ra là Saturday hoặc là Sunday.

Bất kỳ ý tưởng và đề xuất được đánh giá cao!


29
2018-03-05 16:19


gốc




Các câu trả lời:


Có nhiều cách để thực hiện việc này, bạn có thể sử dụng DATENAME và kiểm tra chuỗi thực tế 'Thứ Bảy' hoặc 'Chủ Nhật'

SELECT DATENAME(DW, GETDATE())

Hoặc sử dụng ngày trong tuần và kiểm tra 1 (Chủ Nhật) hoặc 7 (Thứ Bảy)

SELECT DATEPART(DW, GETDATE())

58
2018-03-05 16:24



Hãy cẩn thận vì @@ DATEFIRST (xem câu trả lời dưới đây) msdn.microsoft.com/de-de/library/ms181598.aspx - Jakob
Chú ý: sử dụng SET DATEFIRST 7 để đảm bảo điều này hoạt động bên ngoài hệ thống của Hoa Kỳ! - Peter Albert


DECLARE @dayNumber INT;
SET @dayNumber = DATEPART(DW, GETDATE());

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

Điều này có thể tạo ra kết quả sai, bởi vì số được tạo bởi ngày tháng trong ngày phụ thuộc vào giá trị được đặt bởi SET DATEFIRST. Điều này đặt ngày đầu tiên của tuần. Một cách khác là:

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

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

10
2017-10-28 13:06





SELECT DATENAME(weekday, GetDate())

Kiểm tra điều này cho máy chủ sql: http://msdn.microsoft.com/en-US/library/ms174395(v=sql.90).aspx Kiểm tra này cho .net: http://msdn.microsoft.com/en-us/library/bb762911.aspx


6
2018-03-05 16:20



Bài viết đó dành cho .NET ... - msmucker0527


Điều này sẽ giúp bạn biết tên trong ngày:

SELECT DATENAME(weekday, GETDATE())

3
2018-03-05 16:22





Chú ý: Các câu trả lời khác chỉ hoạt động trên máy chủ SQL với cấu hình tiếng Anh! Sử dụng SET DATEFIRST 7 đảm bảo DATEPART(DW, ...) trả về 1 cho Chủ Nhật và 7 cho Thứ Bảy.

Đây là phiên bản độc lập với cài đặt cục bộ và không yêu cầu sử dụng:

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;

Nếu bạn không muốn sử dụng hàm, chỉ cần sử dụng hàm này trong câu lệnh SELECT của bạn:

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

3
2017-11-19 21:09





Biểu thức này

SELECT (((DATEPART(DW, @my_date_var) - 1 ) + @@DATEFIRST ) % 7)

sẽ luôn trả về một số từ 0 đến 6 trong đó

0 -> Sunday
1 -> Monday
2 -> Tuesday
3 -> Wednesday
4 -> Thursday
5 -> Friday
6 -> Saturday

Độc lập từ @@DATEFIRST

Vì vậy, một ngày cuối tuần được thử nghiệm như thế này

SELECT (CASE
           WHEN (((DATEPART(DW, @my_date_var) - 1 ) + @@DATEFIRST ) % 7) IN (0,6)
           THEN 1
           ELSE 0
       END) AS is_weekend_day

2
2018-03-21 14:34





ok tôi tìm ra:

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

hơn tôi sử dụng: .......... HOẶC miễn phí = 1


1
2018-03-04 12:09