Извлечение часов из 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
relgrem
источник
2

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

SELECT CONVERT(CHAR(8),GETDATE(),108)
Армандо Родригес
источник
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
Хамид Нади
источник
0

Я не могу извлечь часы, с ЧАСОМ (Дата ())

Существует способ вызова HOUR(хотя я бы не рекомендовал использовать его, потому что есть DATEPARTфункция) с использованием скалярных функций ODBC :

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

LiveDemo

Лукаш Шозда
источник
-2

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

like 


datepart(hour , getdate())
Фред
источник
8
Какой смысл вашего вклада, который повторяет информацию, представленную почти в каждом другом «ответе» на этот вопрос?
Синди Мейстер