Удалить часть строки, включающую определенный символ, из строки с помощью MySQL

#mysql #substring

#mysql #подстрока

Вопрос:

 STACKHYUUM.ROOOO
  

Мне нужно удалить символы, оставшиеся для

 ''
  

и результат должен быть

 HYUUM.ROOOO
  

Пожалуйста, помогите

Ответ №1:

Согласно документации :

  SUBSTRING_INDEX(str,delim,count)
  

Возвращает подстроку из строки str перед подсчетом вхождений разделителя delim. Если значение count положительное, возвращается все, что находится слева от конечного разделителя (считая слева). Если значение count отрицательное, возвращается все, что находится справа от конечного разделителя (считая справа). SUBSTRING_INDEX() выполняет сопоставление с учетом регистра при поиске delim.

В вашем примере str — это ‘STACKHYUUM.ROOOOO’. Будьте осторожны с », его необходимо экранировать, потому что это специальный символ. Для этого замените » на ‘\’. делим равен ‘\’ (также экранирован), а count равен -1, потому что вам нужна правильная часть делима.

Пример :

 mysql> SELECT * FROM foo;
 ------------------- 
| name              |
 ------------------- 
| STACKHYUUM.ROOOO |
 ------------------- 
1 row in set (0.00 sec)
  

Затем

 mysql> SELECT SUBSTRING_INDEX(name, '\', -1) AS foo FROM foo;
 ------------- 
| foo         |
 ------------- 
| HYUUM.ROOOO |
 ------------- 
1 row in set (0.00 sec)
  

Или более простой пример :

 SELECT SUBSTRING_INDEX('STACK\HYUUM.ROOOO', '\', -1);
  

Не забудьте экранировать обратную косую черту в ‘STACKHYUUM.ROOOOO’.

Комментарии:

1. Вы правы. Но когда мы даем SELECT SUBSTRING_INDEX(‘STACKHYUUM.ROOOOO’, ‘\’, -1) подобным образом, результатом является STACKHYUUM.ROOOOO

2. @jennifer Когда значение существует в базе данных, » уже экранировано. если вы делаете это, как ваш комментарий, вы должны экранировать ». Вы должны заменить SELECT SUBSTRING_INDEX(‘STACKHYUUM.ROOOOO’, ‘\’, -1) на SELECT SUBSTRING_INDEX(‘STACK\HYUUM.ROOOOO’, ‘\’, -1) ( смотрите обратную косую черту).

Ответ №2:

Попробуйте с:

  SUBSTRING_INDEX('STACKHYUUM.ROOOO', '\', -1)
  

Комментарии:

1. когда я даю select SUBSTRING_INDEX(‘STACKHYUUM.ROOOOO’, ‘\’, -1) ; я получил STACKHYUUM.ROOOOO. мне нужен HYUUM.ROOOOO

2. но когда я выбираю имя столбца, указывая select SUBSTRING_INDEX(имя_пользователя, ‘\’, -1) из employee_master .. Это работает

Ответ №3:

 REPLACE('STACKHYUUM.ROOOO','\','');
  

ошибка ups. Я попытаюсь найти решение.

Комментарии:

1. Это в сочетании с SUBSTRING_INDEX() для сопоставления всего, что осталось от , должно сработать. РЕДАКТИРОВАТЬ: Если подумать, это может быть полное решение:-P

2. я даю select REPLACE(‘STACKHYUUM.ROOOOO’,’\’,»); результатом является STACKHYUUM.ROOOOO

3. да, я знаю, что пытаюсь найти решение. Я думал, вам нужно заменить только обратную косую черту =)

Ответ №4:

Я получил это 🙂

 select employee_id,emp_email,SUBSTRING_INDEX(user_name, '\', -1) 
from employee_master