Пожалуйста, помогите мне с этим оракулом SQL-запрос - PullRequest
0 голосов
/ 12 июня 2019

Я должен написать SQL-запрос оракула, в котором я должен проверить, что длина строки равна 64 или нет, если она равна 64, как в этой строке 'Lst021_23-FehlerDatenprotokoll.AenDienst2019.06.11_08.48.42.tx', затем расширение строкидолжно быть txt, и мы должны удалить часть строки до - также

Так что для строки
'Lst021_23-FehlerDatenprotokoll.AenDienst2019.06.11_08.48.42.tx' вывод будет

FehlerDatenprotokoll.AenDienst2019.06.11_08.48.42.txt

Я пытаюсь написать этот запрос

SELECT 'Lst021_23-Fehler-Datenprotokoll.AenDienst.2019.06.11_08.48.42.tx'FROM Dual;
CASE 
WHEN LENGTH('Lst021_23-Fehler-Datenprotokoll.AenDienst.2019.06.11_08.48.42.tx')=64 THEN CONCAT('SUBSTR('Lst021_23-Fehler-Datenprotokoll.AenDienst.2019.06.11_08.48.42.tx',11,53)','t')
END
CASE;

Ответы [ 3 ]

0 голосов
/ 12 июня 2019

Предпочитаете писать свою строку только один раз:

with t( str ) as
(
 select 'Lst021_23-Fehler-Datenprotokoll.AenDienst.2019.06.11_08.48.42.tx' from dual   
)    
select decode(length(str), 64, concat(str,'t'))  as "File Name"
  from t;

File Name
-----------------------------------------------------------------
Lst021_23-Fehler-Datenprotokoll.AenDienst.2019.06.11_08.48.42.txt

Демо

0 голосов
/ 12 июня 2019

Как насчет этого?Если длина равна 64, то:

  • взять подстроку от первого дефиса (-) до конца строки
  • apply regexp_replace и подставить последнее слово"(\w+$) с txt (как вы сказали, расширение должно быть txt)

Вот так:

SQL> with test (id, col) as
  2    (select 1, 'Lst021_23-Fehler-Datenprotokoll.AenDienst.2019.06.11_08.48.42.tx' from dual
  3     union all
  4     select 2, 'blabla-Something-else.Which_is_64_characters_long.2019.06.12.txt' from dual
  5     union all
  6     select 3, 'This will not be "fixed" as it is shorter than 64 chars.exe'      from dual
  7     union all
  8     select 4, 'Yet another nice string-Kein_Fehler.Mitwoch.2019.06.13_22.22.com' from dual
  9     )
 10  select
 11    id,
 12    case when length(col) = 64 then
 13              regexp_replace(substr(col, instr(col, '-') + 1), '\w+$', 'txt')
 14         else col
 15    end result
 16  from test;

 ID RESULT
--- -----------------------------------------------------------------
  1 Fehler-Datenprotokoll.AenDienst.2019.06.11_08.48.42.txt
  2 Something-else.Which_is_64_characters_long.2019.06.12.txt
  3 This will not be "fixed" as it is shorter than 64 chars.exe
  4 Kein_Fehler.Mitwoch.2019.06.13_22.22.txt

SQL>
0 голосов
/ 12 июня 2019

У вас есть проблема с синтаксисом в скрипте. Попробуйте вот так

SELECT 
CASE 
    WHEN LENGTH('Lst021_23-Fehler-Datenprotokoll.AenDienst.2019.06.11_08.48.42.tx') = 64
        THEN CONCAT(SUBSTR('Lst021_23-Fehler-Datenprotokoll.AenDienst.2019.06.11_08.48.42.tx',11,53),'t')
    ELSE 'Lst021_23-Fehler-Datenprotokoll.AenDienst.2019.06.11_08.48.42.tx'
END
FROM Dual;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...