2012-03-05 37 views
24

Với một số datetime, có cách nào chúng ta có thể biết nó xảy ra là Saturday hoặc Sunday.Cách kiểm tra xem ngày giờ có xảy ra vào Thứ Bảy hoặc Chủ Nhật trong SQL Server 2008

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

+2

Bạn ** không biết ** rằng toàn bộ ** tài liệu SQL Server ** có sẵn ** trực tuyến và miễn phí ** tại [MSDN Sách trực tuyến] (http://msdn.microsoft.com/en- chúng tôi/thư viện/ms130214.aspx) - phải không ?? Có hướng dẫn ở đây, Tham khảo của Lập trình viên - bạn đặt tên nó .... với khoảng một tìm kiếm và hai lần nhấp chuột, bạn sẽ tìm thấy [tài liệu về hàm T-SQL 'DATENAME'] (http://msdn.microsoft.com /en-us/library/ms174395.aspx) –

+1

@marc_s, FYI kết quả thứ hai của tìm kiếm Google cho "cuối tuần máy chủ sql" là trang này. Với khoảng một tìm kiếm và một lần nhấp, bạn sẽ tìm thấy nhận xét bi quan của mình. – user2023861

+1

@ user2023861: đó là tốt - ** Tôi đứng bởi bình luận của tôi **, và tôi hoàn toàn có thể sống với điều đó. Các lập trình viên ngày nay thực sự nên học cách đi đến tài liệu sản phẩm chính thức trước, cho những câu hỏi cơ bản như thế này. Nếu bạn có một vấn đề phức tạp hơn có thể không được đề cập trong tài liệu sản phẩm - đó là khi bạn nên đến SO - nhưng không phải cho các câu hỏi SQL Server 101 như thế này. Thực sự: học cách đọc các tài liệu hướng dẫn tuyệt vời và tài liệu trực tuyến! –

Trả lời

51

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

SELECT DATENAME(DW, GETDATE()) 

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

SELECT DATEPART(DW, GETDATE()) 
+4

Hãy cẩn thận vì @@ DATEFIRST (xem câu trả lời dưới đây) https://msdn.microsoft.com/de-de/library/ms181598.aspx – Jakob

+1

Chú ý: Sử dụng 'SET DATEFIRST 7' để đảm bảo hoạt động bên ngoài hệ thống của Hoa Kỳ! –

3

này sẽ giúp bạn có tên trong ngày:

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'; 

Điều này có thể tạo ra kết quả sai, bởi vì số lượng sản xuất bởi các datepart tuần 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. Vì vậy, 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'; 
2

Chú ý: Những câu trả lời khác chỉ làm việc 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.

Dưới đây là một phiên bản mà không phụ thuộc vào các thiết lập địa phương và không cần 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 các chức năng, chỉ cần sử dụng 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 
0

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

Các vấn đề liên quan