#oracle
#Oracle
Вопрос:
Я просто пытаюсь получить час моей таблицы из созданной даты в базе данных Oracle 12c, но она показывает ошибку НЕДОПУСТИМОГО ПОЛЯ ИЗВЛЕЧЕНИЯ ДЛЯ ПОЛЯ ИЗВЛЕЧЕНИЯ. пожалуйста, помогите мне получить час моей даты, мой код здесь…
SELECT
EXTRACT( HOUR FROM (TO_CHAR(CREATED_DATE,'RRRR-MM-DD HH:MI:SS')) ) HOUR
FROM
INVOICE_V;
Комментарии:
1. Сначала выясните, какую СУБД вы используете
2. @Strawberry это oracle 12c
Ответ №1:
моя дата хранится как 6/1/2020 4:04:50 вечера в этом формате, и функция извлечения не принимает эту функцию.
Не храните даты в виде строк.
Но, поскольку у вас есть, преобразуйте его из строки в дату, используя TO_DATE
:
SELECT EXTRACT( HOUR FROM TO_TIMESTAMP(CREATED_DATE,'DD/MM/YYYY HH12:MI:SS AM') ) AS HOUR
FROM INVOICE_V;
Если, однако, вы имели в виду, что он просто отображается в этом формате (и фактически является DATE
типом данных), тогда CAST
дата соответствует отметке времени:
SELECT EXTRACT( HOUR FROM CAST( CREATED_DATE AS TIMESTAMP) ) AS HOUR
FROM INVOICE_V;
Ответ №2:
An hour
не может использоваться в EXTRACT
функции.
Единственный способ извлечь час — использовать TO_CHAR
или вычесть его из TRUNC
даты следующим образом:
TO_CHAR(created_date,'HH24') -- OR 'HH' as per your requirement
-- OR
FLOOR(24*(created_date- TRUNC(created_date)))
Пожалуйста, обратите внимание, что Oracle не хранит даты ни в каком формате. Он имеет свое собственное двоичное представление. То, что вы видите при выборе из таблицы, основано на NLS_DATE_FORMAT
параметре.
Вы можете установить его в соответствии с вашими требованиями.
ALTER SESSION SET NLS_dATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'; -- like this
Ответ №3:
Если у вас есть date
столбец (или аналогичный), то:
select extract(hour from cast(created_date as timestamp)) as hr
from invoice_v
В качестве альтернативы:
select to_char(created_date, 'hh24') as hr
from invoice_v
Первое выражение возвращает целое число, в то время как второе выдает строку.
Обратите внимание, что hour
это ключевое слово языка, следовательно, не лучший выбор для идентификатора (здесь вы использовали его в качестве псевдонима столбца). Я изменил это.
Комментарии:
1. Та же ошибка, потому что моя дата хранится как 6/1/2020 4:04:50 вечера в этом формате, и функция извлечения не принимает эту функцию.