Вы можете сделать это одним вызовом 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