2012-06-30 60 views
5

Tôi muốn chọn tất cả các bản ghi từ [Orders] có số [Submissiondate] dưới 7 ngày.Chọn tất cả các bản ghi 'trẻ' hơn 7 ngày

Tôi hoàn toàn bối rối. Đây là truy vấn tôi đang thực hiện:

SELECT * FROM [Orders] WHERE ([SubmissionDate] < @SubmissionDate) 

Không hoạt động.

+0

Bất kỳ ứng trước nào? bạn đã nhận được giải pháp? –

Trả lời

0

Bạn cũng có thể thử này DATEDIFF

SELECT * FROM [Orders] WHERE datediff(d,SubmissionDate,GETDATE()) > 7 

nơi getdate() là ngày hôm nay và d là sự khác biệt trong những ngày

select datediff(d,'2012/06/23',GETDATE()) 

nên cung cấp cho bạn 7 vì nó là 7 ngày trước

5

Nếu bạn muốn đặt hàng với SubmissionDate giữa @SubmissionDate@SubmissionDate - 7 days thì đây là cách Tôi sẽ thực hiện điều đó trong Transact-SQL:

WHERE [SubmissionDate] BETWEEN DATEADD(DAY, -7, @SubmissionDate) 
          AND @SubmissionDate 

Lưu ý rằng BETWEEN ngụ ý >=<=. Nếu bạn cần bất bình đẳng nghiêm ngặt, làm cho nó một cái gì đó như thế này:

WHERE [SubmissionDate] > DATEADD(DAY, -7, @SubmissionDate) 
    AND [SubmissionDate] < @SubmissionDate 
1

Giả sử rằng các tham số sql @SubmissionDate là ngày (và thời gian) bây giờ. Bạn có thể sử dụng các truy vấn sau đây sẽ trả lại những [Orders]nộp trong thời hạn 7 ngày qua:

SELECT * FROM [Orders] WHERE ([SubmissionDate] >= DATEADD(DD, -7, DATEADD(dd, 0, DATEDIFF(dd, 0, @SubmissionDate)))) 

Hai bài phát biểu quan trọng đối với giải pháp này:

  1. Time 'phần' đang được gỡ bỏ từ @SubmissionDate .
  2. Vì không có 'Ngày Để' hạn chế, làm bao gồm các [Orders] nộp 'hôm nay (cho đến thời điểm truy vấn đã được thực hiện).

Mã sau chỉ để lấy ngày 'một phần' của ngày tháng (được trích xuất từ ​​ngày khác SO thread).

DATEADD(dd, 0, DATEDIFF(dd, 0, @SubmissionDate)) 
+0

Điểm tốt về việc đặt lại phần thời gian. Nhưng nếu bạn cho rằng '@ SubmissionDate' đại diện cho ngày tháng và thời gian hiện tại, thì không có nhiều điểm trong việc sử dụng đối số, có phải không? Bạn chỉ có thể sử dụng 'GETDATE()' hoặc 'CURRENT_TIMESTAMP' thay thế. –

+0

Ý tôi là, nếu OP * là * sử dụng một đối số, thì có khả năng (theo ý kiến ​​của tôi) rằng đối số đại diện cho dấu thời gian * tùy ý *, không phải lúc nào cũng là giá trị hiện tại. –

+0

@AndriyM vâng tôi thấy quan điểm của bạn, có lẽ đó là điều mà tác giả có thể làm rõ, nếu nó được dự định rằng '@ SubmissionDate' param. phân bổ ngày hiện tại (và thời gian). Vâng, tôi luôn cố gắng tránh các truy vấn để sử dụng trực tiếp ngày tháng và thời gian do db-server cung cấp và luôn sử dụng các tham số, vì vậy tôi cảm thấy thoải mái với giả định rằng '@ SubmissionDate' có nghĩa là phân bổ ngày giờ hiện tại. –

0

Hãy thử điều này

SELECT * FROM [Orders] WHERE [submission_date] < NOW() - INTERVAL 7 NGÀY;

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