Витяг годин з DateTime (SQL Server 2005)


179

Я можу витягти місяць і день, використовуючи Day(Date()), Month(Date()). Я не можу витягувати години, с HOUR(Date()). Я отримую таку помилку.

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

Як я можу витягнути години?

Відповіді:


354
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.