Задать вопрос

Обрезка строки в sql

Подскажите, как сделать, что бы в строке после запроса удалялось всё после пробела?
Прим. "аааа ббб"--> "аааа"
  • Вопрос задан
  • 42154 просмотра
Подписаться 6 Оценить Комментировать
Решения вопроса 1
GeneMoss
@GeneMoss
void
В MySQL, например, есть две функции, которые могут помочь:
— INSTR — возвращает первую позицию подстроки в строке.
— LEFT — обрезает текст с начала до указанной позиции.

Поэтому можно сделать так (-1 нужен, чтобы в результат не включать пробел):
SET @str = 'Некоторая строка с пробелами';
SELECT LEFT(@str, INSTR(@str, ' ') - 1);

Но, если в строке нет пробелов, то вернется строка с нулевой длиной. Для этого можно добавить условие, и если нет пробелов в строке — возвращать исходную строку.
SET @str = 'Некоторая_строка_без_пробелов';
SELECT IF(
	INSTR(@str, ' ') = 0, 
	@str,
	LEFT(@str, INSTR(@str, ' ') - 1)
);

P.S.: Но, если Вам это нужно не для составления сложных вложенных запросов, то лучше такую обработку перенести на клиентский код.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
evnuh
@evnuh
Поиск Гугл помог мне, впусти и ты его в свой дом
Траллировать - разрешаю!
Ответ написан
Комментировать
Вот как-то так (в MS SQL):
declare @input_str varchar(max) = 'aaa bbb'
         , @idx int
         , @output_str varchar(max)

select @idx = charindex(' ', @input_str)
select @output_str = substring(@input_str, 0, @idx)
Ответ написан
Комментировать
@grin_planet
Ещё удобно пользоваться
SUBSTRING_INDEX(str, delimiter, count): вырезает из строки str подстроку. Параметр delimiter определяет разделитель внутри строки. А параметр count определяет, до какого вхождения разделителя надо вырезать подстроку. Если count положительный, то подстрока вырезается с начала, если count отрицательный, то с конца строки str:
SELECT SUBSTRING_INDEX('Galaxy S8 Plus', ' ', 1), -- Galaxy
(SELECT SUBSTRING_INDEX('Galaxy S8 Plus', ' ', 2) ), -- Galaxy S8
(SELECT SUBSTRING_INDEX('Galaxy S8 Plus', ' ', -2) ); -- S8 Plus
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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