2012-11-26 9 views
5

Muszę wybrać dane zawierające czas> godzina czternasta w datatimestamp każdego dnia w SQL Server Management Studio Microsoft SQL Server 2005 - 9.00.4060.00 (X64) DB tabela, która ma dwa lata danych . Jaki jest najlepszy sposób na zrobienie tego? Mój znacznik czasu ma następujący format: DATETIME, '2005-10-13 16:00:00', 102. Mam dane losowo razy każdego popołudnia. Muszę uzyskać dane po godzinie 16.00 każdego dnia. Nie tylko na jeden dzień.Wybieranie wszystkich danych przy użyciu czasu większego niż 4pm

Na przykład próbowałem na jeden dzień jak ten:

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

Z jakiego RDBMS korzystasz? Serwer SQL? MySQL? Wyrocznia? Coś innego? Czy twój znacznik czasu jest rzeczywiście typem danych 'timestamp',' datetime' lub czymś innym? – LittleBobbyTables

+0

Którą wersję bazy danych używasz? –

+0

co to jest 102 w pytaniu? czy nie będzie to 2005-10-13 16: 00: 00.102? – SKJ

Odpowiedz

12

Trudno odczytać Twoje pytanie, ale zakładając, że rzeczywiście używasz typ datetime danych, można użyć datepart znaleźć żadnych dat z czasem większa niż 4 PM:

WHERE datepart(hh, YourDate) > 16 

od teraz trzeba minut, jak również, jeśli chcesz rekordy po 4:45 PM, można oddać swoją datę do czasu tak:

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) 

Zasadniczo rzucisz datę używając convert's Date and Time styles przekonwertować datę na ciąg znaków czasu, a następnie przekształcić z powrotem do datetime dla porównania przed żądanym czasie.

SQL Server 2008+

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

Tak, próbowałem. Otrzymuję komunikat o błędzie konwersji – user1783998

+0

Dobra, jaki jest typ danych twojego pola, z którym chcesz wysłać zapytanie? Czy jest to 'timestamp',' datetime', 'varchar' lub coś innego? Jaki jest dokładny błąd konwersji, który otrzymujesz? Dajesz nam prawie nic do pracy. – LittleBobbyTables

+0

@ user1783998 - wszelkie informacje o tym, co nie działa? – LittleBobbyTables

0

to będzie działać niezależnie od wybranego terminu. To nie porówna dat. Raczej datepart() wyodrębni element godzinę, z DateTime comapre z danym czasie (na przykład 4 P.M. w danym przypadku)

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

ja zakładając ModifiedDate jak nazwa kolumny. to zwróci dane od 4 P.M. do 11:59:59 P.M Edytuj: Sprawdziłem to na MS SQL server 2012. Również będzie działać z datetime format.

+0

Jaki jest sens używania 'GETDATE()'? Używając 'GETDATE()', wybierze wszystko z tabeli, jeśli zdarzy ci się uruchomić zapytanie po 4 po południu. Jeśli uruchomisz go przed 16.00, nic nie dostaniesz. – LittleBobbyTables

+0

To będzie używane do pobierania danych z bieżącego dnia.aby uzyskać dane dla wszystkich poprzednich dni, użytkownik może wprowadzić datę. To nie jest wielka sprawa ... – SKJ

+0

Nie, nie będzie. Wybierasz wszystko, jeśli aktualna godzina w 'getdate()' jest większa niż 16. Nawet nie określasz kolumny tabeli w swojej tabeli "WHERE". Spróbuj uruchomić 'WYBIERZ * z

gdzie DATEPART (hh, GETDATE())> 23' i zobacz, co otrzymasz (zakładając, że nie jest po 11 PM, gdzie jesteś). – LittleBobbyTables