2012-11-26 25 views
5

Tôi cần chọn Thời gian chứa dữ liệu> 4 giờ chiều trong datatimestamp mỗi ngày trong SQL Server Management Studio Microsoft SQL Server 2005 - 9.00,4060,00 (X64) Bảng DB có hai năm dữ liệu . Cách tốt nhất để làm điều này là gì? Dấu thời gian của tôi có định dạng sau: DATETIME, '2005-10-13 16:00:00', 102. Tôi có dữ liệu vào những thời điểm ngẫu nhiên mỗi buổi chiều. Tôi cần lấy dữ liệu sau 4 giờ chiều mỗi ngày. Không chỉ trong một ngày.Chọn tất cả dữ liệu sử dụng thời gian lớn hơn 4 giờ chiều

Ví dụ tôi đã cố gắng cho một ngày như thế này:

SELECT  Yield, Date, ProductType, Direct 
FROM   MIAC_CCYX 
WHERE  (Date < CONVERT(DATETIME, '2005-10-13 16:00:00', 102)) Thanks for help 
+3

Bạn đang sử dụng RDBMS nào? SQL Server? MySQL? Oracle? Thứ gì khác? Dấu thời gian của bạn có thực sự là kiểu dữ liệu 'timestamp',' datetime' hay cái gì khác không? – LittleBobbyTables

+0

Bạn đang sử dụng phiên bản cơ sở dữ liệu nào? –

+0

102 câu hỏi của bạn là gì? nó sẽ không được 2005-10-13 16: 00: 00.102? – SKJ

Trả lời

12

Thật khó để đọc câu hỏi của bạn, nhưng giả sử bạn thực sự đang sử dụng một loại datetime dữ liệu, bạn có thể sử dụng datepart tìm thấy bất kỳ ngày với thời gian lớn hơn 04:00:

WHERE datepart(hh, YourDate) > 16 

Kể từ bây giờ bạn cần phút là tốt, nếu bạn muốn ghi sau 04:45, bạn có thể cast ngày của bạn để một thời gian như thế này:

SQL Server 2000/2005

SELECT Yield, [Date], ProductType, Direct 
FROM MIAC_CCYX 
WHERE cast(convert(char(8), [Date], 108) as datetime) > cast('16:45' as datetime) 

Về cơ bản bạn cast ngày sử dụng convert's Date and Time styles để chuyển đổi ngày thành một chuỗi thời gian, sau đó chuyển đổi trở lại một datetime để so sánh với thời gian mong muốn của bạn.

SQL Server 2008+

SELECT Yield, [Date], ProductType, Direct 
FROM MIAC_CCYX 
WHERE CAST([Date] as time) > CAST('16:45' as time) 
+0

Có, tôi đã thử. Tôi đang gặp lỗi chuyển đổi – user1783998

+0

OK, loại dữ liệu của trường bạn đang truy vấn là gì? Đó có phải là 'timestamp',' datetime', 'varchar' hay cái gì khác không? Lỗi chuyển đổi chính xác bạn đang nhận được là gì? Bạn đang cho chúng tôi bên cạnh không có gì để làm việc với. – LittleBobbyTables

+0

@ user1783998 - mọi thông tin về những gì không hoạt động? – LittleBobbyTables

0

này sẽ làm việc bất cứ ngày của bạn. Điều này sẽ không so sánh ngày tháng. Thay vào đó, DATEPART() sẽ trích xuất các yếu tố giờ từ datetime và comapre với thời gian nhất định của bạn (ví dụ 16:00 trong trường hợp của bạn)

SELECT * from <table> where DATEPART(hh, ModifiedDate) >= 16 

Tôi giả định ModifiedDate như tên cột. điều này sẽ trả về dữ liệu từ 4 giờ chiều đến 11:59:59 P.M Chỉnh sửa: Tôi đã kiểm tra điều này với máy chủ MS SQL 2012. Ngoài ra, nó sẽ hoạt động với định dạng ngày giờ.

+0

Điểm của việc sử dụng 'GETDATE()' là gì? Bằng cách sử dụng 'GETDATE()', điều đó sẽ chọn mọi thứ từ bảng nếu bạn chạy truy vấn sau 4 giờ chiều. Nếu bạn chạy nó trước 4 giờ chiều, bạn sẽ không nhận được gì. – LittleBobbyTables

+0

Điều này sẽ được sử dụng để lấy dữ liệu của ngày hiện tại.để nhận dữ liệu cho tất cả các ngày trước đó, người dùng có thể nhập ngày. Đây không phải là một việc lớn ... – SKJ

+0

Không, nó sẽ không. Bạn đang chọn mọi thứ nếu giờ hiện tại trong 'getdate()' lớn hơn 16. Bạn thậm chí không chỉ định một cột trong bảng 'WHERE' staetment. Hãy thử chạy 'SELECT * từ

trong đó DATEPART (hh, GETDATE())> 23' và xem những gì bạn nhận được (giả sử không phải là 11 giờ chiều bạn đang ở đâu). – LittleBobbyTables

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