2009-07-11 10 views
123

È possibile estrarre il mese e il giorno utilizzando Day(Date()), Month(Date()). Non riesco a estrarre ore, con HOUR(Date()). Ottengo il seguente errore.Estrazione ore da un DateTime (SQL Server 2005)

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

Come posso estrarre ore?

+0

possibile duplicato [datetime T-SQL arrotondata al minuto più vicino e più vicini ore con l'utilizzo di funzioni] (http://stackoverflow.com/questions/6666866/t-sql-datetime -avvicinato-al-più-vicino-e-più-vicino-con-funzioni-uso) – Pekka

+3

@Pekka - In questa domanda vogliono solo l'ora parte di un 'DATETIME'. La domanda collegata richiede l'intera data e ora, con la parte relativa all'ora arrotondata al minuto o all'ora più vicini; non è un duplicato. – Tony

risposta

244
SELECT DATEPART(HOUR, GETDATE()); 

DATEPART documentation

+0

buon dio che stai usando anche (loband) :) – TheVillageIdiot

+5

Per favore scrivi parole come "ORA" invece di usare una stenografia pigra che non è sempre quello che ti aspetti (prova "y").Sentiti libero di mantenere il tuo codice come preferisci, ma per l'insegnamento, sono contraria al fatto che promuova una stenografia pigra che porta a confusione o peggio. Vedi # 6 qui http://blogs.sqlsentry.com/aaronbertrand/bad-habits-wrong-optimizations/ e http://sqlblog.com/blogs/aaron_bertrand/archive/2011/09/20/bad-habits-to -kick-using-shorthand-with-date-time-operations.aspx –

13

Usa datepart.

Esempio:

datepart(HOUR, date) 
+0

Per favore scrivi parole come "ORA" invece di usare una scorciatoia pigra che non è sempre quello che ti aspetti (prova "y"). Sentiti libero di mantenere il tuo codice come preferisci, ma per l'insegnamento, sono contraria al fatto che promuova una stenografia pigra che porta a confusione o peggio. Vedi # 6 qui http://blogs.sqlsentry.com/aaronbertrand/bad-habits-wrong-optimizations/ e http://sqlblog.com/blogs/aaron_bertrand/archive/2011/09/20/bad-habits-to -kick-using-shorthand-with-date-time-operations.aspx –

8

provare anche questa:

DATEPART(HOUR,GETDATE()) 
26

... lo si può utilizzare su qualsiasi tipo granularità cioè:

DATEPART(YEAR, [date]) 

DATEPART(MONTH, [date]) 

DATEPART(DAY, [date])  

DATEPART(HOUR, [date]) 

DATEPART(MINUTE, [date]) 

(nota: mi piace il [] intorno alla parola riservata alla data però. Ovviamente è nel caso in cui la colonna con data/ora è etichettata come "data")

Funzione
1

Il DATEPART() viene utilizzato per restituire una singola parte di una data/ora, come ad esempio l'anno, mese, giorno, ora, minuto, ecc

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 

Esempio

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

è necessario utilizzare datepart()

like 


datepart(hour , getdate()) 
+4

Qual è il punto del tuo contributo, che ripete le informazioni fornite in quasi tutte le altre "risposte" a questa domanda? –

+0

Hai fatto un buon lavoro! – JanLeeYu

0

non posso estrarre ore, con l'ora (Date())

C'è un modo per chiamare HOUR (io non lo consiglio di usarlo, però, perché non v'è DATEPART funzione) utilizzando ODBC Scalar Functions:

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

LiveDemo

0

DATEPART(HOUR, [date]) Restituisce l'ora in tempo militare (da 00 a 23) Se si desidera 1AM, 3PM ecc., è necessario distenderlo:

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 

fabbrica

Problemi correlati