2012-04-05 27 views
5

Tôi đang cố tạo truy vấn sẽ chọn dựa trên một cột DateTimeSyncDate.Truy vấn để chọn giữa hai lần trong ngày

Là một số nền, bảng tôi truy vấn được nhập hàng ngày trong hàng nghìn vào cùng một thời điểm chính xác hàng ngày. Tôi muốn tìm các mục nhập không nhập vào thời gian "thông thường" trong ngày.

Vì vậy, tôi muốn truy vấn nơi thời gian trong cột DateTime nằm giữa hai lần: cho phép nói 14: 00-14: 30 (2-230) vào bất kỳ ngày/tháng/năm nào.

SELECT * FROM MyTable 
WHERE DatePart(SyncDate, ..?) BETWEEN (14:00..?) and (14:30..?) 

Chức năng DatePart có vẻ là những gì tôi cần, nhưng tôi không hiểu cách áp dụng nó vào tình huống này. Giúp đỡ của bạn được đánh giá cao nhiều oh queriers tuyệt vời.

EDIT: Tôi đã nhầm lẫn, tôi đang chạy SQL-Server-2005 làm chương trình phụ trợ của mình. Lấy làm tiếc!

Trả lời

21

Kể từ khi bạn đang ở trên SQL Server 2008 , bạn có thể sử dụng mới TIME datatype:

SELECT * FROM MyTable 
WHERE CAST(SyncDate AS TIME) BETWEEN '14:00' and '14:30' 

Nếu phụ trợ của bạn không phải là 2008 chưa :-) sau đó bạn sẽ cần một cái gì đó như:

SELECT * FROM MyTable 
WHERE DATEPART(HOUR, SyncDate) = 14 AND DATEPART(MINUTE, SyncDate) BETWEEN 0 AND 30 

để kiểm tra 14: 00-14: 30 giờ.

+0

Weird. Tôi đang chạy năm 2008, nó nhận ra 'thời gian' như một từ khóa, nhưng nói rằng nó không phải là một 'loại hệ thống được xác định'. – ImGreg

+0

Máy chủ của bạn là phụ trợ chạy năm 2008 hay chỉ là bản sao của SQL Server Mgmt Studio của bạn? Kiểm tra nó trên 2008 R2 và nó sẽ làm việc tốt .... –

+0

Bạn là chính xác, chỉ là phòng thu. Phần cuối của phiên bản MDAC hay làm cách nào để kiểm tra? – ImGreg

2

Làm thế nào về vấn đề này ....

select * from MyTable where 
cast(cast(datepart(HH,SyncDate) as char(2)) + cast(datepart(HH,SyncDate) as char(2)) as int) between 1400 and 1430 
+0

Loại phương pháp iffy. Tuy nhiên, đưa ra các diễn viên như int và đặt apostrophes xung quanh '1400' và nó thực sự hoạt động. 1 cho một cách tiếp cận sáng tạo. – ImGreg

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