Как получить datetime от оракула varchar с окружающими персонажами - PullRequest
0 голосов
/ 29 января 2019

У меня есть varchar2 «Напечатано 21.04.2014, 3:00:00 AM», и я хочу получить только «21.04.2014 3:00:00 AM» в качестве даты.Я думал использовать что-то вроде:

У меня есть: REGEXP_SUBSTR ('Отпечатано 21.04.2014, 3:00:00 AM', '[0-9 /: APM] * $'). Результатов:21.04.2014, 3:00:00

Однако

ВЫБРАТЬ to_date (REGEXP_SUBSTR ('Напечатано 21.04.2014, 3:00:00 AM', '[0-9]/: APM] * $ '),' ГГГГ-ММ-ДД ЧЧ24: MI: SS ') FROM DUAL;

приводит к ошибке «Недопустимый месяц».

Предложения?

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Если формат фиксированный - включая текст, который вы хотите игнорировать - тогда вы можете преобразовать всю строку в дату или метку времени, не используя регулярное выражение или подстроку:

select to_date('Printed 4/21/2014 3:00:00 AM', '"Printed" MM/DD/YYYY HH:MI:SS AM') as result
from dual;

RESULT             
-------------------
2014-04-21 03:00:00

исправленная часть «Печатная» обрабатывается как символьный литерал , заключая эту часть в двойные кавычки внутри модели формата.

Если вы действительно не интересуетесь временем, вы можете удалить этопотом:

select trunc(to_date('Printed 4/21/2014 3:00:00 AM', '"Printed" MM/DD/YYYY HH:MI:SS AM')) as result
from dual;

RESULT             
-------------------
2014-04-21 00:00:00
0 голосов
/ 29 января 2019

Проблема: правильно идентифицирована с помощью mathguy - формат даты

Я решил, что мне действительно не нужна метка времени, поэтому:

SELECT to_date (REGEXP_SUBSTR ('Printed 21/4/2014', '[0-9 /] * $'), 'MM / DD / YYYY') FROM DUAL;

работает нормально.

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