2011-12-12 42 views
10

Tôi đang cố gắng thực hiện truy vấn giữa 2 ngày. Tôi muốn làm điều đó mà không cần phải lo lắng về thời gian. Khi người dùng nhập vào 2 ngày họ muốn tìm kiếm, không có lựa chọn nào cho thời gian. Điều này có nghĩa là các ngày mà họ nhập mặc định là 12:00 sáng.TSQL: Ngày GIỮA Truy vấn - Bỏ qua Thời gian

Các ngày trong bảng có thời gian. Tôi chỉ muốn bỏ qua thời gian tất cả cùng nhau để tìm kiếm mang lại bất kỳ hình thức hồ sơ cho biết phạm vi ngày.

Đây là SQL của tôi:

TheDate BETWEEN @EnteredBeginDate AND @EnteredEndDate 

Vì vậy, khi một người dùng thực hiện tìm kiếm khoảng từ 8/6/2009 VÀ 9/9/2009 Tôi muốn trả lại hồ sơ:

8/6/2009 11:33:02 AM 
8/6/2009 11:39:17 AM 
9/9/2009 8:21:30 AM 

Điều gì đang xảy ra bây giờ là tôi chỉ quay lại:

8/6/2009 11:33:02 AM 
8/6/2009 11:39:17 AM 

Ai đó có thể vui lòng giới thiệu cách tốt nhất để làm điều này trong SQL? Tôi biết làm thế nào để làm điều đó trong C#.

+0

gì ** phiên bản ** của SQL Server ?? –

Trả lời

10

Chỉ cần sử dụng DATEADD cho ENDDATE để đặt nó vào nửa đêm ngày hôm sau ...

TheDate BETWEEN @EnteredBeginDate AND DATEADD(day, 1, @EnteredEndDate)

Nếu bạn muốn được thực sự chính xác, bạn có thể trừ một thứ hai hoặc một phần nghìn giây từ rằng để làm cho nó 11:59:59 ngày bạn đã xác định:

TheDate BETWEEN @EnteredBeginDate AND DATEADD(second, -1, (DATEADD(day, 1, @EnteredEndDate)))

+0

Đây sẽ là câu trả lời tôi đã chọn. 1 cho tùy chọn chính xác. Cảm ơn mọi người! – Jared

1
TheDate BETWEEN @EnteredBeginDate AND dateadd(day, 1, @EnteredEndDate) 
+3

Nếu bạn đăng mã, XML hoặc mẫu dữ liệu, ** XIN VUI LÒNG ** làm nổi bật những dòng đó trong trình soạn thảo văn bản và nhấp vào nút "mẫu mã" ('{}') trên thanh công cụ trình soạn thảo để định dạng và cú pháp tô sáng nó! –

7

Nếu bạn đang ở trên SQL server hoặc 2008 R2, bạn có thể sử dụng mới DATE datatype:

TheDate BETWEEN CAST(@EnteredBeginDate AS DATE) AND CAST(@EnteredEndDate AS DATE) 

Đó dải tắt phần thời gian và trông chỉ vào ngày

+0

Điều này thật tuyệt. Tôi phải sử dụng năm 2005 mặc dù. – Jared

0

Nếu chỉ ngày được thông qua vào SQL Server, nó sẽ làm cho thời gian 12:00 AM. Vì vậy, ngày kết thúc trên mệnh đề giữa là 9/9/2009 12:00 SA. Chỉ cần thêm một ngày hoặc sửa đổi ngày được chuyển vào truy vấn để bao gồm thời gian chính xác.

3

Nếu bạn đang sử dụng SQL Server 2008, sau đó làm điều này:

TheDate BETWEEN cast(@EnteredBeginDate as date) AND cast(@EnteredEndDate as date) 
Các vấn đề liên quan