Как обновить значение столбца псевдостолбцом в SQL - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть одна таблица в oracle 12c db, где один столбец имеет тип данных varchar2 , но значения имеют формат DATE .и по какой-то ошибке смешиваются два разных типа формата.В основном я должен изменить формат и сделать все значения одинаковыми.правильный формат: "2018-11-21-02.57.26.00" , но некоторые значения выглядят так: "21.11.2008 20: 03: 10.066414" Нам нужны все значениябыть как правильный формат.Для этого нужно подготовить одно обновление.

Sample

Я подготовил оператор select следующим образом. Create_TS должен быть обновлен как Create_TS_NEW только для тех строк, где CREATE_TS имеет «% /%». Мне нужно знать, могу ли я обновить эти строки в таблице с помощью псевдостолбца, например Create_TS_NEW

enter image description here

1 Ответ

0 голосов
/ 23 ноября 2018

Сначала попробуйте найти значение с помощью косой черты (/), а затем преобразовать его в формат даты.

     SELECT 
        CREATE_TS,
        CASE WHEN  INSTR(CREATE_TS,'/')>0 THEN TO_DATE(SUBSTR(CREATE_TS,1,19),'MM/DD/YYYY HH24:MI:SS') 
        ELSE TO_DATE(SUBSTR(CREATE_TS,1,19),'YYYY-MM-DD-HH24-MI-SS') end default_date_format,

        to_char(CASE WHEN  INSTR(CREATE_TS,'/')>0 THEN TO_DATE(SUBSTR(CREATE_TS,1,19),'MM/DD/YYYY HH24:MI:SS') 
        ELSE TO_DATE(SUBSTR(CREATE_TS,1,19),'YYYY-MM-DD-HH24-MI-SS') end,'YYYY-MM-DD-HH24-MI-SS') CREATE_TS_new 
    FROM Table_

Просто поместите производный столбец в оператор обновления, которого будет достаточно для обновления требуемого формата.

Update Table_ set create_ts=
to_char(CASE WHEN  INSTR(CREATE_TS,'/')>0 THEN TO_DATE(SUBSTR(CREATE_TS,1,19),'MM/DD/YYYY HH24:MI:SS') 
        ELSE TO_DATE(SUBSTR(CREATE_TS,1,19),'YYYY-MM-DD-HH24-MI-SS') end,'YYYY-MM-DD-HH24-MI-SS') ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...