tipo obtener hora fecha example ejemplo dato datepart sql sql-server datetime

hora - Cómo obtener registros después de un cierto tiempo usando el campo SQL datetime



time sql (8)

Si tengo un campo de fecha y hora, ¿cómo obtengo solo los registros creados después de un tiempo determinado, ignorando la fecha por completo?

Es una tabla de registro que indica cuándo las personas se conectan y hacen algo en nuestra aplicación. Quiero saber con qué frecuencia las personas llegan después de las 5 p.m.

(Lo siento, es SQL Server. Pero esto podría ser útil para otras personas para otras bases de datos)


¿Qué sistema de base de datos estás usando? Las funciones de fecha / hora varían ampliamente.

Para Oracle, podrías decir

SELECT * FROM TABLE WHERE TO_CHAR(THE_DATE, ''HH24:MI:SS'') BETWEEN ''17:00:00'' AND ''23:59:59'';

Además, probablemente deba pasar al siguiente día y también seleccionar las horas entre la medianoche y, por ejemplo, las 6 a. M.


Lo mejor que puedo pensar sería: no use un campo DateTime; bueno, podrías usar mucho DATEADD / DATEPART, etc., pero será lento si tienes muchos datos, ya que no puede usar un índice aquí. Es posible que su base de datos ofrezca un tipo adecuado de forma nativa, como el tipo de HORA en SQL Server 2008, pero también puede almacenar fácilmente la compensación de tiempo en minutos (por ejemplo).



En MySQL, esto sería

where time(datetimefield) > ''17:00:00''



En Informix, suponiendo que utiliza un campo DATETIME YEAR TO SECOND para mantener la fecha completa, debe escribir:

WHERE EXTEND(dt_column, HOUR TO SECOND) > DATETIME(17:00:00) HOUR TO SECOND

''EXTEND'' puede, de hecho, contratar el conjunto de campos (y ampliarlo, como su nombre lo sugiere).

Como señaló Thilo, esta es un área de extrema variabilidad entre DBMS (y Informix es ciertamente una de las variantes).


Ok, lo tengo.

select myfield1, myfield2, mydatefield from mytable where datename(hour, mydatefield) > 17

Esto me dará registros con un mydatefield con un tiempo posterior a las 5 p.m.


Para MSSQL usa el método CONVERT:

DECLARE @TempDate datetime = ''1/2/2016 6:28:03 AM'' SELECT @TempDate as PassedInDate, CASE WHEN CONVERT(nvarchar(30), @TempDate, 108) < ''06:30:00'' then ''Before 6:30am'' ELSE ''On or after 6:30am'' END, CASE WHEN CONVERT(nvarchar(30), @TempDate, 108) >= ''10:30:00'' then ''On or after 10:30am'' ELSE ''Before 10:30am'' END