Можем ли мы извлечь столбец времени из даты, в котором хранится только дата, а не время? - PullRequest
0 голосов
/ 04 октября 2018

У меня есть таблица с датой столбца (datecreated) и данными примера 2.10.2017 Так что я хочу знать время вставленных данных, но я храню только дату, а не время.Можно мне время добыть?

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

Компонент времени, безусловно, присутствует, и вы можете увидеть его, используя TO_CHAR:

SELECT TO_CHAR(DATECREATED, 'DD-MON-YYYY HH24:MI:SS')
  FROM YOUR_TABLE;

Однако, если вы не установили время создания записи, ЧАС, МИНУТА иВТОРОЕ поле должно быть нулевым.Другими словами, если вы сделали что-то вроде

INSERT INTO YOUR_TABLE (DATECREATED) VALUES (TO_DATE('09-OCT-2010', 'DD-MON-YYYY'));

, временные компоненты даты будут равны нулю.

dbfiddle здесь

0 голосов
/ 04 октября 2018

Это распространенное заблуждение - тип данных DATE всегда хранится в таблицах Oracle как 7 байтов , содержащих год (2 байта), месяц, день, часы, минуты и секунды (по 1 байту каждый)).Он никогда не будет хранить только компонент год / месяц / день.

Однако, если вы не предоставите Oracle какую-либо информацию о том, что поместить в компонент времени, Oracle установит для этих компонентов значения по умолчанию, равные нулю.

Итак, если вы сделаете:

CREATE TABLE table_name ( value DATE );
INSERT INTO table_name
  SELECT DATE '2018-01-01' FROM DUAL UNION ALL
  SELECT CAST( TIMESTAMP '2018-10-04 08:20:14' AS DATE ) FROM DUAL;

Затем:

SELECT TO_CHAR( value, 'YYYY-MM-DD"T"HH24:MI:SS' ) AS formatted,
       DUMP( value ) AS dmp,
       EXTRACT( HOUR FROM CAST( value AS TIMESTAMP ) ) As hr
FROM   table_name;

Выходы:

FORMATTED           DMP                                HR
------------------- ---------------------------------- --
2018-01-01T00:00:00 Typ=12 Len=7: 120,118,1,1,1,1,1     0
2018-10-04T08:20:14 Typ=12 Len=7: 120,118,10,4,9,21,15  8

Показывает, что компоненты времени присутствуют;Вы можете извлечь их, используя функции TO_CHAR или EXTRACT;и если вы не укажете значения, они по умолчанию будут равны нулю.

я сохраняю только дату, а не время.Можно извлечь время

Нет, если вы не указали время, Oracle по умолчанию установит для часов, минут и секунд значение даты 00:00:00.

Если вы использовали SYSDATE (или что-то подобное) для вставки дат, тогда у него будет ненулевой компонент времени, и компонент времени просто не отображается вашим пользовательским интерфейсом, вы можете использовать TO_CHAR и т. Д. Для переопределенияФормат даты вашего пользовательского интерфейса по умолчанию и получить информацию.

0 голосов
/ 04 октября 2018

Тип date в Oracle также включает часы, минуты и т. Д. Поэтому, если вы не урезали его при вставке, он сохраняется.Но в настройках по умолчанию некоторые клиенты их не показывают.

Попробуйте

SELECT to_char(datecreated, 'YYYY-MM-DD HH24:MI:SS')
       FROM elbat;

, чтобы получить год, месяц, день, час, минуты и секунды.

...