Извлечение часов из DateTime (SQL Server 2005)


180

Я могу извлечь месяц и день, используя Day(Date()), Month(Date()). Я не могу извлечь часы, с HOUR(Date()). Я получаю следующую ошибку.

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

Как я могу извлечь часы?

Ответы:


355
SELECT DATEPART(HOUR, GETDATE());

DATEPART документация


11
Пожалуйста, изложите такие вещи, как HOURвместо использования ленивых сокращений, что не всегда то, что вы ожидаете (попробуйте y). Не стесняйтесь поддерживать свой собственный код так, как вам нравится, но для преподавания я против продвижения ленивых сокращений, которые приводят к путанице или хуже. Смотрите # 6 здесь: blogs.sqlsentry.com/aaronbertrand/… и sqlblog.com/blogs/aaron_bertrand/archive/2011/09/20/…
Аарон Бертран,

3
@AaronBertrand Это не «ленивая стенография», это документированная краткая форма. «Ленивый» использует короткие формы, которые короче минимальной документированной версии, которые могут работать, но могут иметь непредвиденные последствия.
Auspex

3
@Auspex Не могу заставить вас не полностью упустить момент или прочитать причины моих слов. Не все, что задокументировано, является лучшей практикой.
Аарон Бертран

5
@AaronBertrand Я понял. Но вы пытаетесь применить (в случае неправильного редактирования ответов нескольких людей) свои собственные стандарты. Ваша "лучшая практика" - ничего подобного.
Auspex

29

... вы можете использовать его для любого типа гранулярности, т.е.

DATEPART(YEAR, [date])

DATEPART(MONTH, [date]) 

DATEPART(DAY, [date])    

DATEPART(HOUR, [date]) 

DATEPART(MINUTE, [date])

(примечание: мне нравится [] вокруг слова, зарезервированного для даты. Конечно, это в том случае, если ваш столбец с отметкой времени помечен как «дата»)



9

попробуйте это тоже:

   DATEPART(HOUR,GETDATE()) 

2

DATEPART(HOUR, [date]) возвращает час по военному времени (от 00 до 23). Если вы хотите 1:00, 3:00 и т. д., вам нужно выяснить это:

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

работает


1

Функция DATEPART () используется для возврата одной части даты / времени, такой как год, месяц, день, час, минута и т. Д.

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 

пример

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


-2

Вы должны использовать datepart ()

like 


datepart(hour , getdate())

8
Какой смысл вашего вклада, который повторяет информацию, представленную почти в каждом другом «ответе» на этот вопрос?
Синди Мейстер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.