Ý tưởng ở đây là sử dụng các quy tắc hàm ý viết lại:
IF (x) THEN (y) is equivalent to (NOT (x) OR y)
Trong trường hợp của bạn
IF (DATEPART(HOUR, CURRENT_TIMESTAMP) >= 16)
THEN (DATEDIFF(DAY, CURRENT_TIMESTAMP, MailDate) = 1)
tương đương với
(NOT (DATEPART(HOUR, CURRENT_TIMESTAMP) >= 16)
OR (DATEDIFF(DAY, CURRENT_TIMESTAMP, MailDate) = 1))
và là chính nó tương đương với
((DATEPART(HOUR, CURRENT_TIMESTAMP) < 16)
OR (DATEDIFF(DAY, CURRENT_TIMESTAMP, MailDate) = 1))
Re-viết ELSE
khoản ban đầu như một tuyên bố IF..THEN
theo đúng nghĩa của nó:
IF (DATEPART(HOUR, CURRENT_TIMESTAMP) < 16)
THEN (DATEDIFF(DAY, CURRENT_TIMESTAMP, MailDate) = 0)
tương đương với (lần này omiting các bước trung gian)
((DATEPART(HOUR, CURRENT_TIMESTAMP) >= 16)
OR (DATEDIFF(DAY, CURRENT_TIMESTAMP, MailDate) = 0))
Khái niệm hai sau đó có thể viết dưới dạng bình thường liên kết ("một loạt các AND
s)
SELECT *
FROM the_table
WHERE ((DATEPART(HOUR, CURRENT_TIMESTAMP) < 16)
OR (DATEDIFF(DAY, CURRENT_TIMESTAMP, MailDate) = 1))
AND
(((DATEPART(HOUR, CURRENT_TIMESTAMP) >= 16
OR (DATEDIFF(DAY, CURRENT_TIMESTAMP, MailDate) = 0)) ;
Xin chào RobIII, bạn thân. Chỉ muốn nói, tôi đã upvote bạn, nhưng downvotes có thể là kết quả của các cuộc hội thoại trong bài viết này. Đừng coi đó là cá nhân, tất cả chúng ta đều có thể học được điều gì đó :) Chỉ cần nhớ suy nghĩ về những gì bạn đang nói khi bạn đăng nó và xem xét nó có thể xảy ra với người khác như thế nào. Tôi và những người khác ở đây cố gắng hết sức để biến SO thành một cộng đồng thân thiện chào đón tất cả các cấp độ kỹ năng và mang lại cho mọi người một cơ hội. Có vẻ như máy của bạn cũng đã được đánh dấu là câu trả lời, vì vậy hãy chúc mừng và chúc bạn một ngày tuyệt vời! – mellamokb
Roblll, Tôi upvoted bạn và nếu nó làm cho bạn cảm thấy bất kỳ tốt hơn, tôi muốn nói rằng tôi thực hiện mã của bạn vì nó trông rất hiệu quả. Tất nhiên phải mất một lúc để tôi hiểu nó. :) Cảm ơn rất nhiều – user1345260