2009-07-11 29 views
123

Puedo extraer el mes y el día utilizando Day(Date()), Month(Date()). No puedo extraer horas, con HOUR(Date()). Obtuve el siguiente error.Extraer horas de DateTime (SQL Server 2005)

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

¿Cómo puedo extraer horas?

+0

posible duplicado de [datetime T-SQL redondeado al minuto más cercano y hora más cercanos con el uso de funciones] (http://stackoverflow.com/questions/6666866/t-sql-datetime -Rodeado-al-minuto-más cercano-y-más-cercano-horas-con-usar-funciones) – Pekka

+3

@Pekka - En esta pregunta solo quieren la parte de la hora de un 'DATETIME'. La pregunta vinculada desea la fecha y la hora completas, con la parte del tiempo redondeada al minuto u hora más cercano; no es un duplicado – Tony

Respuesta

244
SELECT DATEPART(HOUR, GETDATE()); 

DATEPART documentation

+0

buen dios que también está usando (loband) :) – TheVillageIdiot

+5

Por favor explique cosas como 'HORA 'en lugar de usar taquigrafía perezosa que no siempre es lo que espera (intente' y').Siéntete libre de mantener tu propio código como quieras, pero para enseñar, me opongo a que *** promueva la taquigrafía perezosa que conduce a la confusión o algo peor. Ver # 6 aquí http://blogs.sqlsentry.com/aaronbertrand/bad-habits-wrong-optimizations/ y http://sqlblog.com/blogs/aaron_bertrand/archive/2011/09/20/bad-habits-to -kick-using-shorthand-with-date-time-operations.aspx –

13

Uso datepart.

Ej:

datepart(HOUR, date) 
+0

Por favor, deletree cosas como 'HORA 'en lugar de usar taquigrafía perezosa que no siempre es lo que espera (intente' y'). Siéntete libre de mantener tu propio código como quieras, pero para enseñar, me opongo a que *** promueva la taquigrafía perezosa que conduce a la confusión o algo peor. Ver # 6 aquí http://blogs.sqlsentry.com/aaronbertrand/bad-habits-wrong-optimizations/ y http://sqlblog.com/blogs/aaron_bertrand/archive/2011/09/20/bad-habits-to -kick-using-shorthand-with-date-time-operations.aspx –

8

tratar éste también:

DATEPART(HOUR,GETDATE()) 
26

... se puede usar en cualquier tipo de granularidad es decir:

DATEPART(YEAR, [date]) 

DATEPART(MONTH, [date]) 

DATEPART(DAY, [date])  

DATEPART(HOUR, [date]) 

DATEPART(MINUTE, [date]) 

(nota: Me gusta el [] alrededor de la fecha de la palabra reservada, por supuesto, por supuesto, en caso de que su columna con marca de tiempo tenga la etiqueta "fecha")

función
1

El DATEPART() se utiliza para devolver una sola parte de una fecha/hora, tales 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 
0

debe utilizar datepart()

like 


datepart(hour , getdate()) 
+4

¿Cuál es el punto de su contribución, que repite la información proporcionada en casi todas las demás "respuestas" a esta pregunta? –

+0

¡Has hecho un buen trabajo! – JanLeeYu

0

no puedo extraer horas, con la hora (Date())

No es una forma de llamar HOUR (que no recomendaría a usarlo, porque aunque existe DATEPART función) utilizando ODBC Scalar Functions:

SELECT {fn HOUR(GETDATE())} AS hour 

LiveDemo

0

DATEPART(HOUR, [date]) devuelve la hora en tiempo militar (00 a 23) Si quieres 1AM, 3PM, etc., necesitas resolverlo:

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 
0
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 

funciona