powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Обрезать строку с конца
20 сообщений из 45, страница 2 из 2
Обрезать строку с конца
    #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
20 сообщений из 45, страница 2 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Обрезать строку с конца
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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