Extraer horas de un DateTime (SQL Server 2005)


179

Soy capaz de extraer el mes y día mediante el uso de Day(Date()), Month(Date()). No puedo extraer horas, con HOUR(Date()). Obtuve el siguiente error.

'HOUR' is not a recognized built-in function name.

¿Cómo puedo extraer horas?

Respuestas:


354
SELECT DATEPART(HOUR, GETDATE());

DATEPART documentación


11
Por favor, deletree cosas como, en HOURlugar de usar la taquigrafía perezosa que no siempre es lo que espera (intente y). Siéntase libre de mantener su propio código como quiera, pero para enseñar, me opongo a promover la taquigrafía perezosa que genera confusión o algo peor. Ver # 6 aquí blogs.sqlsentry.com/aaronbertrand/… y sqlblog.com/blogs/aaron_bertrand/archive/2011/09/20/…
Aaron Bertrand

3
@AaronBertrand Eso no es "taquigrafía perezosa", es la forma abreviada documentada. "Perezoso" está utilizando formas cortas que son más cortas que la versión mínima documentada, lo que puede funcionar pero puede tener consecuencias no deseadas.
Auspex

3
@Auspex No puedo forzarlo a no perder completamente el punto o leer las razones detrás de mis palabras. No todo lo que está documentado es una mejor práctica.
Aaron Bertrand

55
@ AaronBertrand Entendí el punto. Pero está tratando de hacer cumplir (hasta el punto de editar incorrectamente las respuestas de varias personas) sus propios estándares. Su "mejor práctica" no es nada de eso.
Auspex el

29

... puede usarlo en cualquier tipo de granularidad, es decir:

DATEPART(YEAR, [date])

DATEPART(MONTH, [date]) 

DATEPART(DAY, [date])    

DATEPART(HOUR, [date]) 

DATEPART(MINUTE, [date])

(nota: sin embargo, me gusta la palabra [] alrededor de la fecha reservada. Por supuesto, en caso de que su columna con marca de tiempo esté etiquetada como "fecha")



9

prueba este también:

   DATEPART(HOUR,GETDATE()) 

2

DATEPART(HOUR, [date]) devuelve la hora en tiempo militar (00 a 23) Si desea 1 a.m., 3 p.m., etc., debe ponerlo en caso:

SELECT Run_Time_Hour =
CASE DATEPART(HOUR, R.date_schedule)
    WHEN 0 THEN  '12AM'
    WHEN 1 THEN   '1AM'
    WHEN 2 THEN   '2AM'
    WHEN 3 THEN   '3AM'
    WHEN 4 THEN   '4AM'
    WHEN 5 THEN   '5AM'
    WHEN 6 THEN   '6AM'
    WHEN 7 THEN   '7AM'
    WHEN 8 THEN   '8AM'
    WHEN 9 THEN   '9AM'
    WHEN 10 THEN '10AM'
    WHEN 11 THEN '11AM'
    WHEN 12 THEN '12PM'
    ELSE CONVERT(varchar, DATEPART(HOUR, R.date_schedule)-12) + 'PM'
END
FROM
    dbo.ARCHIVE_RUN_SCHEDULE R


1
select case when [am or _pm] ='PM' and datepart(HOUR,time_received)<>12 
           then dateadd(hour,12,time_received) 
           else time_received 
       END 
from table

trabajos


1

La función DATEPART () se usa para devolver una sola parte de una fecha / hora, como año, mes, día, hora, minuto, etc.

datepart    ***Abbreviation

year        ***yy, yyyy 
quarter     ***qq, q 
month       ***mm, m 
dayofyear   ***dy, y 
day         ***dd, d 
week        ***wk, ww 
weekday     ***dw, w 
hour        ***hh 
minute      ***mi, n 
second      ***ss, s 
millisecond ***ms 
microsecond ***mcs 
nanosecond  ***ns 

Ejemplo

select * 
from table001
where datepart(hh,datetime) like 23


-2

debes usar datepart ()

like 


datepart(hour , getdate())

8
¿Cuál es el punto de su contribución, que repite la información provista en casi todas las "respuestas" a esta pregunta?
Cindy Meister
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.