@doriulbool

Как вырезать или вычленить текст до определённого символа sql запросом?

Имеется таблица типа:

Наименование
АО "Завод Пупкин "Росмоском"
АО "Предприятие Щукина "Портик" филиал"
ЗАО НИИ имени Ломоносова "Горсвет"

Нужно получить:

Наименование
"Росмоском"
"Портик"
"Горсвет"

С substring знаком, но умею резать лишь до первой или последней ковычки.
Как указать номер знака ("), чтобы возможно было получать адекватные ответы и можно ли создать конструкцию типа if, else if, else if, else для того, чтобы прописать все условия в запрос? Есть ли другие варианты решения данной проблемы?
  • Вопрос задан
  • 1322 просмотра
Решения вопроса 1
idShura
@idShura
Похоже в Mysql нет замены регулярными выражения, поэтому написал вот этого монстра (В синтаксисе MySQL не силен) :

SELECT case when CHARACTER_LENGTH(TEXT) - CHARACTER_LENGTH(REPLACE(TEXT, '"', '')) = 2 
                 then SUBSTRING(TEXT FROM LOCATE('"', TEXT)+1 FOR CHARACTER_LENGTH(TEXT) - LOCATE('"', TEXT)-1)
            when CHARACTER_LENGTH(TEXT) - CHARACTER_LENGTH(REPLACE(TEXT, '"', '')) = 3    
                 then SUBSTRING(TEXT FROM LOCATE('"', TEXT,LOCATE('"', TEXT)+1)+1 FOR CHARACTER_LENGTH(TEXT)-LOCATE('"', TEXT,LOCATE('"', TEXT)+1)-1 )
            when CHARACTER_LENGTH(TEXT) - CHARACTER_LENGTH(REPLACE(TEXT, '"', '')) = 4 
                 then SUBSTRING(TEXT FROM LOCATE('"', TEXT,LOCATE('"', TEXT)+1)+1 FOR CHARACTER_LENGTH(TEXT)-LOCATE('"', TEXT, LOCATE('"', TEXT,LOCATE('"', TEXT)+1)+1)-2)
            else null     
       end 
FROM  mytable


или так:

select case when CHARACTER_LENGTH(TEXT) - CHARACTER_LENGTH(REPLACE(TEXT, '"', '')) = 2 
                  then SUBSTRING_INDEX(SUBSTRING_INDEX(TEXT, '"', 2), '"', -1)
            when CHARACTER_LENGTH(TEXT) - CHARACTER_LENGTH(REPLACE(TEXT, '"', '')) > 2  
                 then SUBSTRING_INDEX(SUBSTRING_INDEX(TEXT, '"', 3), '"', -1)
            else null
       end   
  FROM  mytable
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@LiguidCool
Регулярные выражения.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы