2009-07-11 6 views
123

Ich kann den Monat und den Tag extrahieren, indem Sie Day(Date()), Month(Date()) verwenden. Ich kann keine Stunden extrahieren, mit HOUR(Date()). Ich erhalte den folgenden Fehler.Extrahieren von Stunden aus einer DateTime (SQL Server 2005)

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

Wie kann ich Stunden extrahieren?

+0

möglich Duplikat [T-SQL-Datetime nächste Minute gerundet und am nächsten Stunden mit Funktionen] (http://stackoverflow.com/questions/6666866/t-sql-datetime -gerundet-auf-nächste-Minute-und-nächste-Stunden-mit-verwenden-Funktionen) – Pekka

+3

@Pekka - In dieser Frage wollen sie nur die Stunde Teil einer 'DATETIME'. Die verknüpfte Frage möchte das gesamte Datum und die gesamte Zeit, wobei der Zeitteil auf die nächste Minute oder Stunde gerundet wird; Es ist kein Duplikat. – Tony

Antwort

244
SELECT DATEPART(HOUR, GETDATE()); 

DATEPART documentation

+0

good god Sie verwenden auch (Loband) :) – TheVillageIdiot

+5

Bitte buchstabieren Sie Dinge wie 'HOUR' anstelle von faulen Kurzschrift, die nicht immer das ist, was Sie erwarten (versuchen Sie' y').Fühlen Sie sich frei, Ihren eigenen Code zu behalten, wie Sie wollen, aber für den Unterricht bin ich gegen *** Förderung *** faule Kurzschrift, die zu Verwirrung oder schlimmer führt. Siehe # 6 hier http://blogs.sqlsentry.com/aaronbertrand/bad-habits-wrong-optimizations/ und http://sqlblog.com/blogs/aaron_bertrand/archive/2011/09/20/bad-habits-to -Kick-using-shorthand-mit-Datum-Zeit-Operationen.aspx –

13

Verwendung datepart.

ZB:

datepart(HOUR, date) 
+0

Bitte buchstabieren Sie Dinge wie 'HOUR' anstelle von faulen Kurzschrift, die nicht immer das ist, was Sie erwarten (versuchen Sie' y'). Fühlen Sie sich frei, Ihren eigenen Code zu behalten, wie Sie wollen, aber für den Unterricht bin ich gegen *** Förderung *** faule Kurzschrift, die zu Verwirrung oder schlimmer führt. Siehe # 6 hier http://blogs.sqlsentry.com/aaronbertrand/bad-habits-wrong-optimizations/ und http://sqlblog.com/blogs/aaron_bertrand/archive/2011/09/20/bad-habits-to -kick-using-shorthand-with-date-time-operations.aspx –

8

versuchen diese zu:

DATEPART(HOUR,GETDATE()) 
26

... Sie es auf jedem Granularität Typ dh verwenden können:

DATEPART(YEAR, [date]) 

DATEPART(MONTH, [date]) 

DATEPART(DAY, [date])  

DATEPART(HOUR, [date]) 

DATEPART(MINUTE, [date]) 

(Anmerkung: Ich mag das [] um das Datum reservierte Wort aber natürlich ist das für den Fall, dass Ihre Spalte mit Zeitstempel mit "Datum" beschriftet ist)

1

Die DATEPART() Funktion wird verwendet, um ein einzelnes Teil eines Datum/Zeit, wie Jahr zurückzukehren, Monat, Tag, Stunde, Minute usw.

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 

Beispiel

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

Sie müssen verwenden Datumsteil()

like 


datepart(hour , getdate()) 
+4

Was ist der Sinn Ihres Beitrags, der die Informationen in fast jeder anderen "Antwort" auf diese Frage wiederholt? –

+0

Sie haben einen guten Job gemacht! – JanLeeYu

0

ich nicht Stunden extrahieren kann, mit HOUR (Date())

Es gibt einen Weg HOUR zu nennen (ich würde es nicht empfehlen, wenn zu verwenden, da es DATEPART-Funktion) mit ODBC Scalar Functions:

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

LiveDemo

0

DATEPART(HOUR, [date]) gibt die Stunde in militärischer Zeit (00 bis 23) Wenn Sie 1AM, 3PM usw. wollen, müssen Sie es aus:

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 

arbeitet