2009-07-11 8 views
123

Je peux extraire le mois et le jour en utilisant Day(Date()), Month(Date()). Je ne peux pas extraire des heures, avec HOUR(Date()). Je reçois l'erreur suivante.Extraction d'heures à partir d'un DateTime (SQL Server 2005)

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

Comment puis-je extraire des heures?

+0

double possible de [datetime T-SQL arrondie au plus proche et plus proche minute heures avec l'utilisation de fonctions] (http://stackoverflow.com/questions/6666866/t-sql-datetime -round-to-nearest-minute-and-nearest-hours-with-using-functions) – Pekka

+3

@Pekka - Dans cette question, ils veulent seulement la partie heure d'un 'DATETIME'. La question liée veut la date et l'heure entière, avec la partie de temps arrondie à la minute ou à l'heure la plus proche; Ce n'est pas un doublon. – Tony

Répondre

244
SELECT DATEPART(HOUR, GETDATE()); 

DATEPART documentation

+0

bon dieu que vous utilisez également (loband) :) – TheVillageIdiot

+5

Veuillez épeler des choses comme 'HOUR' au lieu d'utiliser un raccourci paresseux qui n'est pas toujours ce que vous attendez (essayez' y').N'hésitez pas à maintenir votre propre code comme bon vous semble, mais pour l'enseignement, je suis opposé à la *** promotion *** sténographie paresseux qui mène à la confusion ou pire. Voir # 6 ici http://blogs.sqlsentry.com/aaronbertrand/bad-habits-wrong-optimizations/ et http://sqlblog.com/blogs/aaron_bertrand/archive/2011/09/20/bad-habits-to -kick-using-shorthand-with-date-time-operations.aspx –

13

Utilisez datepart.

Par exemple:

datepart(HOUR, date) 
+0

Veuillez épeler des choses comme 'HEURE' au lieu d'utiliser un raccourci paresseux qui n'est pas toujours ce que vous attendez (essayez' y'). N'hésitez pas à maintenir votre propre code comme bon vous semble, mais pour l'enseignement, je suis opposé à la *** promotion *** sténographie paresseux qui mène à la confusion ou pire. Voir # 6 ici http://blogs.sqlsentry.com/aaronbertrand/bad-habits-wrong-optimizations/ et http://sqlblog.com/blogs/aaron_bertrand/archive/2011/09/20/bad-habits-to -kick-using-shorthand-with-date-time-operations.aspx –

8

essayer celui-ci aussi:

DATEPART(HOUR,GETDATE()) 
26

... vous pouvez l'utiliser sur tout type de granularité à savoir:

DATEPART(YEAR, [date]) 

DATEPART(MONTH, [date]) 

DATEPART(DAY, [date])  

DATEPART(HOUR, [date]) 

DATEPART(MINUTE, [date]) 

(Note: J'aime le [] autour du mot "date réservée" bien sûr c'est au cas où votre colonne avec horodatage est étiquetée "date")

1

La fonction DATEPART() est utilisée pour renvoyer une seule partie d'une date/heure, comme l'année, mois, jour, heure, minute, 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 

Exemple

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

vous devez utiliser datepart()

like 


datepart(hour , getdate()) 
+4

Quel est le point de votre contribution, qui répète les informations fournies dans presque toutes les autres "réponses" à cette question? –

+0

Vous avez fait du bon travail! – JanLeeYu

0

Je ne peux pas extraire heures, avec HEURE (date())

Il est un moyen d'appeler HOUR (Je recommande de ne pas l'utiliser si parce qu'il est fonction DATEPART) en utilisant ODBC Scalar Functions:

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

LiveDemo

0

DATEPART(HOUR, [date]) retourne l'heure en temps militaire (00 à 23) Si vous voulez 1h, 3h, etc, vous devez le sortir:

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 

fonctionne