Создание MySQL SET из строки - PullRequest
       8

Создание MySQL SET из строки

4 голосов
/ 07 декабря 2009

Есть ли способ создать набор из строки отдельных значений в MySQL? Например:

, быстрая, коричневая, лиса ' => 'Тем', 'быстрый', 'коричневый', 'лиса'

Этакий обратный EXPORT_SET без бита.

Привет

Ответы [ 4 ]

3 голосов
/ 27 декабря 2009

Если вы пытаетесь использовать набор в операторе IN вместо разделения строки, вы можете выполнить сравнение, например:

SELECT * FROM `table` WHERE 'the,quick,brown,fox' REGEXP CONCAT('(^|,)','word','(,|$)');

Я не уверен, насколько эффективно это будет, если ваш набор данных большой, но это может быть быстрее, чем чтение и выбор из временной таблицы.

1 голос
/ 27 декабря 2009

Проверено на MySQL 5.1.41:

DROP TABLE IF EXISTS n;
CREATE TEMPORARY TABLE n AS
  SELECT -1 AS N UNION
  SELECT -2 UNION
  SELECT -3 UNION
  SELECT -4 UNION
  SELECT -5;

DROP TABLE IF EXISTS foo;
CREATE TABLE foo AS
  SELECT 'the,quick,brown,fox' AS csv;

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(foo.csv, ',', n.n), ',', 1) AS word
FROM foo JOIN n
  ON (LENGTH(REPLACE(foo.csv, ',', ''))-LENGTH(foo.csv) <= n.n+1);

Результат:

+-------+
| word  |
+-------+
| fox   |
| brown |
| quick |
| the   |
+-------+
0 голосов
/ 25 августа 2014

Разве FIND_IN_SET не решит вашу проблему?

FIND_IN_SET ()

0 голосов
/ 07 декабря 2009

Вы можете разбить текст на отдельные элементы, прочитать таблицу временных значений и затем выбрать результат.

например.

http://forums.mysql.com/read.php?60,78776,242420#msg-242420

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...