powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Обрезать строку с конца
45 сообщений из 45, показаны все 2 страниц
Обрезать строку с конца
    #38555443
sql999966
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Надо в mysql как бы обрезать строку с конца по пробелу.

Если текст:
"privet ira kis"
Надо получить
"privet ira"

Если текст:
"privet ivan"
Надо получить привет
"privet"

Как это сделать?
сам запрос примерно такой
Код: sql
1.
Update tabl set param={тут нужно обработать строку} WHERE color='red'



То есть надо отбросить считая с конца строку до первого пробела
Помогите пожалуйста как это сделать?
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38555453
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
REVERSE(SUBSTRING_INDEX(REVERSE()))
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38555460
sql999966
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не понял.
Нужно вот так:
Код: sql
1.
Update tabl set param1=CONCAT(  [удалить из param1 пробел и слово с конца ], 'stroka') Where color='red'
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38555465
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38555469
sql999966
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уже читал. по этому и обратился за помощью. попробовал как ты посоветовал не получается.
заранее спасибо если кто то поможет!
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38555478
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
SUBSTRING_INDEX('privet ira kis', ' ', -1)
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38555479
sql999966
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Надо если строка "111 222 333" получилось "111 222"
если строка "555 666" получилось "555"

твой метод не работает. с твоим методом получается "111" вместо ""111 222"
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38555481
sql999966
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft, твой код возвращает kis
а надо privet ira
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38555490
sql999966
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У кого опыт большой, подскажите пожалуйста как реализовать задачу?
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38555506
sql999966
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Получилось сделать, вот так работает:
select REVERSE( SUBSTRING(REVERSE('111 222 333', instr(REVERSE('111 222 333'),' ')) )
Но это очень огромный код получился, и думаю будет нагружать mysql
Можно ли сделать проще и красивее????
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38555521
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты разницу между SUBSTRING_INDEX и SUBSTRING видишь, не? они даже по длине раличаются, не говоря уж о выполняемой функции.
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38555525
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sql999966miksoft, твой код возвращает kis
а надо privet iraДа, сорри, был невнимателен.
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38555532
sql999966
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, ты разницу видишь что SUBSTRING_INDEX тут не поможет??
если такой умный приведи пример с SUBSTRING_INDEX.
что бы из '111 222 333' получалось '111 222',
а из '111 222' получалось '111' ????
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38555564
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну нет так нет... я ж не против.
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38555573
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sql999966,

"Обрезать строку с конца" это не по-нашему, мы такой обряд не практикуем. Мы говорим: выкинуть из строки последнее слово.
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38555580
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

Да, у меня тоже что-то не получается через SUBSTRING_INDEX ...
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38555611
sql999966
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В итоге, кто нибудь знает как рещить задачу??

Я написал рабочий код, но он мне не нравится, сильно сложный
Код: sql
1.
select REVERSE( SUBSTRING(REVERSE('111 222 333', instr(REVERSE('111 222 333'),' ')) )


Можно ли сделать проще?
И не будет ли мой код нагружать mysql ?
этот запрос обрабатывает примерно 30 тыс записей.
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38555633
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sql999966не будет ли мой код нагружать mysql ?
этот запрос обрабатывает примерно 30 тыс записей.
Судя по тексту, процедура одноразовая (раз в час - это тоже одноразовая).
Для 30к записей, которые скорее всего помещаются в память, скорость обработки потеряется на скорости дисковых операций чтения-записи.
Так что сойдёт.
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38555642
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftу меня тоже что-то не получается через SUBSTRING_INDEX ...
Да, наверное, я был неправ в своей настойчивости. Постоянно забываю, что с минусом - это отсчитать с конца, а не отбросить с начала.

Приношу свои извинения автору темы.

Покрутил. В любом случае получается, что для обрезки именно одного слова надо либо считать байты с конца, либо слова с начала, либо разделители в строке. И все варианты требуют предусмотреть случай, когда разделителя в строке тупо нет, или когда на "хвосте" забылся пробел.
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38555702
sql999966
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кто-нибудь предложит свой вариант?

С моим варииантом
Код: sql
1.
select REVERSE( SUBSTRING(REVERSE('111 222 333', instr(REVERSE('111 222 333'),' ')) )


Поблема, если нет пробела это вернет пустоту!
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38555703
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sql999966В итоге, кто нибудь знает как рещить задачу??

Кто-нибудь знает почему автор не смог забить в гугль несколько слов

mysql last index of

https://www.google.com/search?safe=off&complete=0&site=webhp&source=hp&q=mysql last index of&oq=mysql last index of&gs_l=hp.3...709.6523.0.6732.0.0.0.0.0.0.0.0..0.0....0...1c.1.34.hp..0.0.0.TprlSGivZOw
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38555704
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вторая ссылка, тыдыщь:

select
LEFT
(
'Have_a_good_day',
LENGTH('Have_a_good_day') - LENGTH(SUBSTRING_INDEX('Have_a_good_day','_',-1))-1
);

работает как часы, три раза надо повторить значение

http://stackoverflow.com/questions/12775352/last-index-of-a-given-substring-in-mysql

Ну нет в mysql непосредственно функции последнего индекса вхождения. Либо строку переворачивать, либо вычислять по кускам.
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38555842
sql999966
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
deblogger твой код работает так же как мой.
мой даже короче.

вопрос в том что если код получает слово '111' то возвращает пустоту.
как сделать что бы если он получает одно слово то и возвращает одно слово?
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38555880
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sql999966,

Это не мой код, я такой фигней не страдаю. Сперва покажите что вы режете, тогда я подумаю как обрезать с остатком. ПОтому что есть теория что у вас там напихано в значение несколько значений с сепаратором как водится у лентяев.
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38555911
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sql999966 ,

где-то там в строке нужно добавить concat(... , ' ')
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38555960
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007где-то там в строке нужно добавить concat(... , ' ')Наоборот, в начале. А на выхлопе его тримануть обратно.
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38556014
sql999966
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как? попробовал если добавлять пробеелы и на финише трим. перестаает работать. из 111 222 возвращает 111 222
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38556092
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaCygapb-007где-то там в строке нужно добавить concat(... , ' ')Наоборот, в начале. А на выхлопе его тримануть обратно.улыбнуло
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38556094
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sql999966как? попробовал если добавлять пробеелы и на финише трим. перестаает работать. из 111 222 возвращает 111 222наверное, как-то так...
Код: sql
1.
select REVERSE( SUBSTRING(REVERSE('111 222 333', instr(concat(REVERSE('111 222 333'),' '),' ')) )
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38556123
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сорь, соврамши... не работает, надо было проверить...
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38556136
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
select '111 222 333', '111222333' into @a, @b;
select 
  REVERSE( 
    SUBSTRING(
      REVERSE(@a), 
      ifnull(nullif(instr(REVERSE(@a),' '),0),1)
    ) 
  ) a,
  REVERSE( 
    SUBSTRING(
      REVERSE(@b), 
      ifnull(nullif(instr(REVERSE(@b),' '),0),1)
    ) 
  ) b;

ab111 222 111222333
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38556146
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
select '111 222 333', '111222333' into @a, @b;
select 
  LEFT(@a, LENGTH(@a)-IFNULL(NULLIF(LENGTH(SUBSTRING_INDEX(@a,' ',-1)),LENGTH(@a)),0)),
  LEFT(@b, LENGTH(@b)-IFNULL(NULLIF(LENGTH(SUBSTRING_INDEX(@b,' ',-1)),LENGTH(@b)),0));
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38556369
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

Чтобы получилось через substring_index() c -1 (с конца), то можно наверное им выделить этот самый конец а потом через replace() заменить на пустую строку. Это ежели точно знаем что оно не повторяется в строке.

А ежели не знаем или повторяется, то можно просто тримнуть то, что нашлось, типа так:

TRIM(TRAILING SUBSTRING_INDEX(#string#, #pattern#, -1) FROM #string#)

нет?
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38556384
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

да, вроде бы так должно получится.
только TRIM придется два раза применять, чтобы еще лишний пробел убрать.
http://sqlfiddle.com/#!2/d41d8/31441
и с односложными строками надо что-то придумать...
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38556407
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

а locate() с конца искать - не умеет (pos<0)? Давно не пользовал, забылось как-то.

Если умеет, то предварительно тупо ищем пробел с конца и смотри есть он ваще или первый или куда... то есть заворачиваем это в if()

Если НЕ умеет ... то сравнивать всю длину строки с тем, что находит substring_index()... опять же заворачиваем в if().

А впрочем, какая разница? Ищем первый пробел через locate() и если оно есть (более одного слова), то применяем правило... с конца.

НО, по условиям задачи заниматься этой дурью вроде как не надо... :)
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38556423
Код: sql
1.
2.
3.
4.
select @a:='11 222 33' a, @b:='1122233' b, @c:='' c,
trim(trailing concat(' ', substring_index(@a, ' ', -1)) from @a) rtrim_a, 
trim(trailing concat(' ', substring_index(@b, ' ', -1)) from @b) rtrim_b,
trim(trailing concat(' ', substring_index(@c, ' ', -1)) from @c) rtrim_c;
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38556587
sql999966
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
почему то в моей mysql это select TRIM(TRAILING 'xyz' FROM 'barxxyz');
ничего не выводит
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38556592
sql999966
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arhat109 ,разобрался
TRIM(TRAILING SUBSTRING_INDEX(#string#, #pattern#, -1) FROM #string#)
работает.
но как сделать что бы это не удаляло одго слово? если '111' возвращает пустоту
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38556620
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sql999966,

Двумя постами выше - читайте. Как раз про это.
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38556645
sql999966
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
select @a:='11 222 33' a, @b:='1122233' b, @c:='' c,
trim(trailing concat(' ', substring_index(@a, ' ', -1)) from @a) rtrim_a, 
trim(trailing concat(' ', substring_index(@b, ' ', -1)) from @b) rtrim_b,
trim(trailing concat(' ', substring_index(@c, ' ', -1)) from @c) rtrim_c;


это какойто непонятный код, не разу такой не встречал. что это значит?
и нельзя ли сделать проше?
к тому же изначально я не знаю какие слова надо будет удалять.
а тут переменным сразу значения вроде присваиваются
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38556655
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
раз пошла такая пьянка...
Код: sql
1.
2.
3.
4.
select @a:='11 222 33' a, @b:='1122233' b, @c:='' c,
trim(trailing concat(' ', substring_index(@a, ' ', -1)) from @a) rtrim_a, 
trim(trailing concat(' ', substring_index(@b, ' ', -1)) from @b) rtrim_b,
trim(trailing concat(' ', substring_index(@c, ' ', -1)) from @c) rtrim_c;

красиво)) спс)
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #38556915
sql999966
Код: sql
1.
2.
3.
4.
select @a:='11 222 33' a, @b:='1122233' b, @c:='' c,
trim(trailing concat(' ', substring_index(@a, ' ', -1)) from @a) rtrim_a, 
trim(trailing concat(' ', substring_index(@b, ' ', -1)) from @b) rtrim_b,
trim(trailing concat(' ', substring_index(@c, ' ', -1)) from @c) rtrim_c;


это какойто непонятный код, не разу такой не встречал. что это значит?
и нельзя ли сделать проше?
к тому же изначально я не знаю какие слова надо будет удалять.
а тут переменным сразу значения вроде присваиваютсяЭто пример, чтобы скопипастить-запустить-увидеть сразу результат. Без таблиц ваабше.


Код: sql
1.
2.
-- Без тестового "хлама"
trim(trailing concat(' ', substring_index({здесь имя поля}, ' ', -1)) from {здесь имя того-же поля})
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Обрезать строку с конца
    #39073629
strader
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
select REVERSE(
SUBSTRING(
LTRIM(REVERSE(if( Position(' ' IN @a)=0 , Concat(@a,' '), @a))), INSTR(LTRIM(REVERSE(if( Position(' ' IN @a)=0 , Concat(@a,' '), @a))),' ')
)
)
;
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #39073901
strader
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот итоговый рабочий код
Код: sql
1.
2.
3.
4.
CREATE FUNCTION TrimLastWord (aString VARCHAR(255)) 
RETURNS Varchar(255)
DETERMINISTIC
RETURN if (Position(' ' IN aString)=0 , aString, REVERSE(LTRIM(SUBSTRING(LTRIM(REVERSE(aString)), INSTR(LTRIM(REVERSE(aString)),' ')))));
...
Рейтинг: 0 / 0
Обрезать строку с конца
    #39074370
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
юниверсил функшен тогда уж
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE FUNCTION TrimAfterWord(aString VARCHAR(255), bString VARCHAR(255))
  RETURNS varchar(255)
  SQL SECURITY INVOKER
  NO SQL
BEGIN

RETURN IF(LOCATE(bString,aString)=0,
  aString,
  LEFT(aString,CHAR_LENGTH(aString)-CHAR_LENGTH(substring_index(aString,bString,-1))-CHAR_LENGTH(bString)));
END
...
Рейтинг: 0 / 0
45 сообщений из 45, показаны все 2 страниц
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Обрезать строку с конца
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]