2013-05-11 37 views
5

Gặp sự cố với truy vấn này. Tôi muốn không chọn hồ sơ mà đã vượt qua SYSTIME cho ngày hiện tại nhưng hiển thị hồ sơ cho những ngày tương lai ngay cả khi họ đã vượt qua SYSTIME hiệnSQL - Điều kiện truy vấn cho thời gian ngày trong tương lai

SELECT * 
    FROM TABLE 
WHERE DATE>= CONVERT(date, SYSDATETIME()) 
    AND STARTTIME > CONVERT(time, SYSDATETIME()) 

Đây là truy vấn. Tôi biết tại sao nó không hoạt động nhưng tôi không thể nghĩ ra một cách để làm những gì tôi đã nói ở trên.

+2

Điều gì là rdbms? Bạn cũng muốn chọn các bản ghi trong quá khứ? –

+0

Máy chủ SQL, đối với trang web ASP – user2321895

+0

Không, tôi đã xử lý các ngày trong quá khứ, tôi chỉ muốn hiển thị các bản ghi hiện tại và trong tương lai. Nhưng đối với các bản ghi ngày hiện tại, chỉ những bản ghi sau thời gian hệ thống hiện tại và các bản ghi trong tương lai không có trong ngày. Bất cứ lúc nào. – user2321895

Trả lời

5
SELECT * 
FROM TABLE 
WHERE 
    (
    (DATE = CONVERT(date, SYSDATETIME() 
    AND STARTTIME > CONVERT(time, SYSDATETIME() 
    ) 
    OR Date > sysdatetime() 
) 

Bạn cần một hoặc điều kiện kể từ ngày giờ ở các trường khác nhau trước tiên bạn phải giải quyết ngày và giờ của ngày hôm nay và sau đó tất cả các ngày trong tương lai bất kể thời gian.

0

Điều này phụ thuộc rất nhiều vào loại dữ liệu ban đầu. Giả sử chúng là date, time hoặc datetime.

Nếu bạn muốn bất cứ điều gì trong tương lai, sau đó làm việc này:

where [date] + starttime > sysdatetime() 

Nếu bạn muốn chỉ trong tương lai ngày sau đó thử:

where [date] > cast(sysdatetime() as date) 

Sau đó là cách tôi giải thích câu hỏi của bạn, nhưng tôi không chắc chắn 100% rằng cách giải thích của tôi là chính xác.

+1

Tôi nghĩ bạn có nghĩa là '[date]' thay vì '[date}' –

+0

Tôi đã sửa chữa lỗi đánh máy trên – davmos

0

Hãy xem các chức năng DATEADDDATEDIFF.

SELECT Date, 
     TomorrowMidnight = Dateadd(dd, Datediff(dd, 0, Getdate()) + 1, 0), 
     TomorrowTimeNow = Dateadd(dd, 1, Getdate()) 
FROM dbo.test 
WHERE date >= Getdate() 
     AND date < Dateadd(dd, Datediff(dd, 0, Getdate()) + 1, 0) 
     OR date > Dateadd(dd, 1, Getdate()) 

này sẽ chọn tất cả các hàng với một datetime muộn hơn bây giờ nhưng sớm hơn nửa đêm vào ngày mai và tất cả các hàng với một cột datetime muộn hơn (nay + 1 ngày).

DEMO

Sửa: Tôi đã bỏ qua cột time. Có lẽ bạn đã sử dụng nó để làm rõ yêu cầu của bạn nhưng bạn thực sự có một cột datetime như câu trả lời của tôi được cho là.

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