Извлечение значения часа из столбца даты и времени с помощью функции DATEPART - PullRequest
1 голос
/ 14 марта 2012

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 14 марта 2012

Эта документация показывает, что часть интервала (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 голосов
/ 15 августа 2018

Существует несколько способов, которыми вы можете извлечь только количество часов из значения MS Access Date в выражении запроса несколькими способами.

Вот некоторые из методов:

DatePart("h", [yourFieldName])  'returns a variant (Integer)

Format([yourFieldName],"h")     'returns a variant (String)

Hour([yourFieldName])           'returns a variant (Integer)

В Access я предпочитаю последний метод, потому что он короткий и понятный.


Исходя из этого вопроса, я подозреваю, что вы просматривали документацию по SQL Server DATEPART функция , которая имеет некоторые тонкие различия.

Не делайте ошибку, думая, что SQL - это одно и то же. имеет сходство, но синтаксис не всегда взаимозаменяем , особенно когда речь идет о MS Access. При поиске ответов о Access я всегда включаю mc access как часть моего поискового запроса Google, и даже все же , когда вы найдете потенциальный ответ, подтвердите, что страница, которую вы ' на самом деле, написано для Access.


Ваша проблема с NULL

Есть кое-что, о чем вы не просили о помощи, но вам нужна помощь! :) Действительно, это старый пост, поэтому вы, должно быть, либо выяснили свою ошибку, или , но вы все еще застряли на ней, или , которую компания выдает неверные отчеты последние 6 лет.

  • [myFieldName] Is Not Null равно не так же, как [myFieldName] <> Null.

Краткое объяснение состоит в том, что Null не является значением . Нуль может все вокруг. Это не ноль, это не '' пустая строка, и это не ZLS (строка нулевой длины).

То, как вы использовали критерии <> NULL, вероятно, ваш запрос возвращал нет записей из-за неправильного синтаксиса.


Примеры:

Например: как вы думаете, какой результат даст это простое уравнение?

(Null+2)*3

... если вы сказали 6, вы не правы !

Результат: NULL. По сути, все, что касается NULL, становится NULL.

Еще один пример. Запустите это в VBA :

 If Null = Null Then MsgBox "Null equals Null." Else MsgBox "Null does NOT equal Null."

... вы можете не получите ответ, который ожидаете!

Для точности все операторы должны использоваться так, как они были предназначены, включая операторы Is и Is Not с NULL оператором .


Дополнительная информация:


Подготовка к неожиданным данным:

Это на самом деле только едва , но сделало меня LMAO, потому что я никогда не думал, что готовлюсь к этому, и решил, что должен поделиться:

img

... что, в свою очередь, напоминает мне об этом надоедливом маленьком ребенке, Бобби Столы .

0 голосов
/ 14 марта 2012

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

SELECT HOUR([Time Aired]) AS Foo
FROM DRTV_CentralOnly
WHERE [Time Aired] <> null;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...