2012-03-14 3 views
1

Я пытаюсь извлечь числовое значение часа из столбца, содержащего время, отформатированное как DateTime. Например, вот несколько записей из этой колонки:Извлечение значения часа из столбца datetime с использованием функции DATEPART

Time Aired 
4:20:00 PM 
12:51:00 PM 
3:17:00 PM 
3:24:00 PM 

С этой колонке я пытаюсь извлечь 4, 12, 3, 3, и т.д. Функция DATEPART, как представляется, быть хорошим вариантом , Однако, когда я пытаюсь использовать эту функцию, как показано ниже, мне предлагается ввести параметр для Часа. Это заставляет меня думать, что я неправильно внедряю DATEPART. Может ли кто-нибудь определить, что может быть проблемой? Может ли проблема заключаться в том, что мой столбец с форматированием даты и времени содержит только значения времени?

SELECT DATEPART(hour, [Time Aired]) AS Foo 
FROM DRTV_CentralOnly 
WHERE [Time Aired] <> null; 

ответ

1

Это documentation показывает, что интервал часть (hours) должны быть заключены в кавычки, и это должно быть h, не hours; Поэтому, попробуйте следующее:

SELECT DATEPART("h", [Time Aired]) AS Foo 
FROM DRTV_CentralOnly 
WHERE [Time Aired] is not null; 

Мой другой вопрос будет, не вы должны написать WHERE [Time Aired] is not null?

+0

Спасибо. Я не знаю, как я забыл цитаты в документации. Что касается инструкции WHERE, обе версии работают. Я не знаю, лучше ли. – hughesdan

+0

Да, я получаю те же результаты запроса, если я использую <> null – hughesdan

+0

Прошло несколько лет, поэтому, надеюсь, вы используете «не null» вместо «<> null». Ссылка: [Как получить NULLs Horribly Wrong] (https://www.simple-talk.com/sql/t-sql-programming/how-to-get-nulls-horribly-wrong-in-sql-server/) – RobertB

-1

Вы можете использовать функцию ЧАСА вместо DATEPART.It дает час номер независимо от AM/PM

SELECT HOUR([Time Aired]) AS Foo 
FROM DRTV_CentralOnly 
WHERE [Time Aired] <> null; 
+0

Спасибо. Я не знал о ЧАСЕ. Я не уверен, выбрать ли ваш ответ или @Icarus. Оба выполняют задание. Я оставлю вопрос открытым, чтобы немного узнать о том, есть ли один подход лучше. – hughesdan

+0

DatePart ("h", "01/05/2012 9:54 PM") возвращает 21, а не 9. – JeffO

Смежные вопросы