2014-09-22 3 views
0

У меня есть столбец со строковым значением "x,x,x,x,x,x,x,x...".Как получить только N первых экземпляров char в столбце String?

Мы хотели бы пройти все строки и иметь только N элементов (все остальные должны быть удалены).

Разделитель ','.

X может иметь разную длину.

Как это сделать?

+0

спасибо, я обновлю –

+0

Попробуйте использовать функцию подстроки. –

+0

как? Я не знаю, где Nth ','. –

ответ

0

Возможно, вам потребуется использовать LOCATE пять раз! :P Это может быть hackjob, но нет другого пути:

LOCATE('bar', 'foobarbar', 5) 

Так что ваш код будет выглядеть следующим образом:

LOCATE(',', 'x,x,x,x,x,x,x,x,..', LOCATE(',', 'x,x,x,x,x,x,x,x,..', LOCATE(',', 'x,x,x,x,x,x,x,x,..', LOCATE(',', 'x,x,x,x,x,x,x,x,..', LOCATE(',', 'x,x,x,x,x,x,x,x,..'))))) 

Это может сработать?


Или вы можете использовать это: SUBSTRING_INDEX():

SUBSTRING_INDEX('x,x,x,x,x,x,x,x,..', ',', 5) 
+0

о, да, есть способ SUBSTRING_INDEX – ninjabber

2

Вы можете сделать это с помощью функции MySQL SUBSTRING_INDEX:

Чтобы получить эту часть, если вы хотите, первые 10 пунктов:

SET @N := 10; 
SELECT SUBSTRING_INDEX(your_column, ',', @N) FROM your_table; 

Чтобы обновить таблицу:

UPDATE your_table SET 
    your_column = SUBSTRING_INDEX(your_column, ',', @N); 

См. this demo или this one, который показывает элементы различной длины.

+0

@paqogomez Моя демонстрация не самая лучшая, потому что она не показывает требование переменной длины. Ваш делает и делает это [новое демо] (http://sqlfiddle.com/#!2/ae8f0/1). – VMai

Смежные вопросы