Как преобразовать формат «2016-07-01 01:12:22 PM» в формат «2016-07-01 13:12:22»? - PullRequest
0 голосов
/ 08 февраля 2019

Может кто-нибудь помочь мне, как преобразовать 2016-07-01 01:12:22 PM в 2016-07-01 13:12:22 в PL / SQL?Я использовал следующее, но не повезло.

SELECT TO_TIMESTAMP ('08-FEB-19 06.41.41.000000 PM', 'DD-Mon-RR HH24:MI:SS.FF') 
FROM dual

Я ожидаю: 08-FEB-19 18.41.41.000000

Я получаю следующую ошибку:

ORA-01830: изображение в формате даты заканчивается перед преобразованием всей входной строки

1 Ответ

0 голосов
/ 08 февраля 2019

Ваша текущая временная метка не имеет смысла, поскольку она указывает время как 18 часов, то есть 6 часов вечера, но затем оно также указывает индикатор меридиана AM, который означает раньше, чем полдень.Таким образом, вы можете удалить AM из вашего шаблона TO_TIMESTAMP:

SELECT TO_TIMESTAMP ('08-FEB-19 18.41.41.000000', 'DD-Mon-RR HH24.MI.SS.FF')
FROM dual;

08-FEB-19 06.41.41.000000000 PM

Обратите внимание, что на самом деле в Oracle нет такой вещи, как временная метка формата 12 или 24 часа.Скорее, если вы хотите просмотреть свою метку времени Oracle в 24-часовом формате, вы можете сделать что-то вроде вызова TO_CHAR с соответствующей маской 24-часового формата:

SELECT
    TO_CHAR(TO_TIMESTAMP ('08-FEB-19 18.41.41.000000', 'DD-Mon-RR HH24.MI.SS.FF'),
        'DD-Mon-RR HH24.MI.SS.FF') AS ts
FROM dual;

08-Feb-19 18.41.41.000000000

Демо

Редактировать:

Если вы хотите преобразовать строку метки времени с 12-часовым временем и компонентом AM / PM, мы можем попробовать:

SELECT
    TO_CHAR(
        TO_TIMESTAMP ('08-FEB-19 06.41.41.000000 PM', 'DD-Mon-RR HH.MI.SS.FF PM'),
        'DD-Mon-RR HH24.MI.SS.FF')
FROM dual;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...