SQL Выберите все слева от символа - PullRequest
0 голосов
/ 17 мая 2019

Мне нужно выделить все слева от дефиса в строке, но в некоторых строках есть 2 дефиса, и в этом случае мне нужно выбрать все слева от второго дефиса.

Строкидлина никогда не бывает одинаковой, а некоторые строки вообще не имеют дефисов.

Пример данных:

  1. Доставка новостей менеджера
  2. Co-Host-Television

Ожидаемые результаты:

  1. Менеджер
  2. Co-Host

Ответы [ 2 ]

1 голос
/ 17 мая 2019

Как насчет того, чтобы просто удалить все, начиная с последнего дефиса?

Вы можете сделать это с помощью stuff():

select stuff(str, len(str) - charindex('-', reverse(str)) + 1, len(str), '')
from (values ('Co-Host-Television'), ('Manager-News Delivery')) v(str);

Или еще лучше с помощью left():

select left(str, len(str) - charindex('-', reverse(str)) )
from (values ('Co-Host-Television'), ('Manager-News Delivery')) v(str);
0 голосов
/ 17 мая 2019

SQL на самом деле не предназначен для работы со строками, вы должны выполнять эту работу на другом языке (на стороне клиента? Возможно).Но, если вы действительно, действительно хотите этого, а данные небольшие и вам не нужно много делать, вы можете использовать следующий код:

select rtrim(reverse(substring(reverse('Manager-News Delivery'),
       charindex('-',reverse('Manager-News Delivery'))+1,99)))
select rtrim(reverse(substring(reverse('Co-Host-Television'),
       charindex('-',reverse('Co-Host-Television'))+1,99)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...