Выборка часов из созданной даты

#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 вечера в этом формате, и функция извлечения не принимает эту функцию.