Предполагая, что "использовать только среднее" означает все между начальным X
и окончательным AB
для этого второго критерия в вашем вопросе, у вас есть несколько вариантов.
1.Использование regexp_replace()
:
SELECT REGEXP_REPLACE('XSOMETHINGAB', '^X(.*)AB$|^#(.{1,8}).*', '\1\2');
SOMETHING
SELECT REGEXP_REPLACE('#SOMETHINGAB', '^X(.*)AB$|^#(.{1,8}).*', '\1\2')
SOMETHIN
2. Или заявление о кейсе:
SELECT
'XSOMETHINGAB' as mystring,
CASE
WHEN mystring LIKE '#%' THEN SUBSTRING(mystring FROM 2 FOR 8)
WHEN mystring LIKE 'X%AB' THEN SUBSTRING(mystring FROM 2 FOR "LENGTH"(mystring) - 3)
ELSE mystring
END