Хранение значений меток времени, хранящихся в столбце varchar2, в столбце даты в Oracle - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть столбец в таблице, в котором хранятся значения меток времени как «2018-01-12 16: 13: 51.107000000», мне нужно вставить этот столбец в столбец даты в другой таблице, какую маску формата я должен использовать здесь ..

Я использовал маску «ГГГГ-ММ-ДД ЧЧ24: MI: SS.FF», но показывает «формат даты не распознан».

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

Вы можете сделать это одним вызовом TO_DATE(), но вы должны указать правильную модель формата. Обратите внимание, что это решение проще (и, возможно, быстрее, если это имеет значение), чем преобразование в метку времени и затем приведение к дате.

Если вы хотите, чтобы TO_DATE() игнорировал часть входной строки, вы можете использовать синтаксис «шаблонный текст» в модели формата. Это заключено в двойные кавычки. Например, если ваша строка содержит букву T где-то, и ее нужно было игнорировать, вы должны включить «T» в той же позиции в модели формата.

Это имеет некоторую гибкость. В вашем случае вы должны игнорировать десятичную точку и до девяти десятичных цифр (максимум для отметки времени в Oracle). Модель формата позволит вам использовать «.999999999» (или любые другие цифры, но большинство программистов использует 9999 ...), чтобы игнорировать десятичную точку и ДО девяти цифр после этого.

Демонстрация : (обратите внимание на "шаблонный текст" в кавычках в модели формата)

select to_date('2018-01-12 16:13:51.100000', 
               'YYYY-MM-DD HH24:MI:SS".999999999"') as dt
from   dual;

DT                 
-------------------
2018-01-12 16:13:51
0 голосов
/ 01 сентября 2018

Я предполагаю, что вы пытались использовать TO_DATE в своих текстовых метках времени. Это не сработает, потому что даты Oracle не хранят ничего более точного, чем секунды. Поскольку ваши временные метки имеют доли секунды, вы можете использовать TO_TIMESTAMP здесь, а затем привести эту фактическую временную отметку к дате:

SELECT
    CAST(TO_TIMESTAMP('2018-01-12 16:13:51.100000',
                      'YYYY-MM-DD HH24:MI:SS.FF') AS DATE)
FROM dual;

12.01.2018 16:13:51

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...