Дата в формате varchar двух разных типов должна быть изменена на дату в формате varchar определенного формата. - PullRequest
0 голосов
/ 11 января 2019

У меня есть столбец LOGIN_DATETIME из таблицы LOGIN

Столбец varchar2 имеет значения в двух форматах

  1. 20-11-2018 01:00:00
  2. 20-07-2018 14:00

Мне нужно извлечь значение varchar из этого столбца в следующем формате

dd-mmm-yyyy hh:mi am/pm

Ожидаемый результат

  1. 20-Nov-2018 01:00 AM
  2. 20-Jul-2018 02:00 PM

Я пытался как

Формат 1:

SELECT TO_CHAR(TO_DATE(LOGIN_DATETIME, 'DD-mm-yyyy hh:mi:ss'), 'dd-mmm-yyyy hh:mi AM') 
FROM LOGIN
WHERE LOGIN_DATETIME is not null;

Формат 2:

SELECT TO_CHAR(TO_DATE(LOGIN_DATETIME, 'DD-mm-yyyy hh:mi'), 'dd-mmm-yyyy hh:mi AM') 
FROM LOGIN
WHERE LOGIN_DATETIME is not null;

Это не работает.

Ответы [ 3 ]

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

Это было легко, я не знаю, синтаксис SQL был не ммм в формате даты

SELECT
TO_char(to_timestamp (LOGIN_DATETIME, 'DD-MM-RRRR HH24:MI:SS.FF'), 'DD-Mon-YYYY HH12:mi AM')
from LOGIN
WHERE LOGIN_DATETIME is NOT null;

ИЛИ

 SELECT
TO_char(to_timestamp (LOGIN_DATETIME, 'DD-MM-YYYY HH24:MI:SS.FF'), 'DD-Mon-YYYY HH12:mi AM')
from LOGIN
WHERE LOGIN_DATETIME is NOT null;

Оба формата работают в одном запросе.

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

Вариант использования и выбор формата в зависимости от длины поля

SELECT 
  CASE WHEN LENGTH(LOGIN_DATETIME) = 16 THEN TO_CHAR(TO_DATE(LOGIN_DATETIME, 'dd-mm-yyyy hh24:mi'), 'dd-mm-yyyy HH:mi AM')
  ELSE TO_CHAR(TO_DATE(LOGIN_DATETIME, 'dd-mm-yyyy hh:mi:ss'), 'dd-mm-yyyy HH:mi AM') 
  END
FROM LOGIN
WHERE LOGIN_DATETIME is not null;
0 голосов
/ 11 января 2019

Вы можете использовать только один запрос:

SELECT 
    CASE 
        WHEN LENGTH(login_datetime) = 19 THEN TO_CHAR(TO_DATE(login_datetime, 'DD-MM-YYYY HH24:MI:SS'), 'DD-Mon-YYYY HH:MI AM')
        WHEN LENGTH(login_datetime) = 16 THEN TO_CHAR(TO_DATE(login_datetime, 'DD-MM-YYYY HH24:MI'), 'DD-Mon-YYYY HH:MI AM')
    END AS login_datetime
FROM login
ORDER BY 1;

Проверено нормально в rextester

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