Извлечение столбца MySQL SET в виде списка целочисленных смещений - PullRequest
2 голосов
/ 30 марта 2009

У меня есть таблица в базе данных MySQL, определенная следующим образом:

CREATE TABLE doc_types (
    id    INT UNSIGNED PRIMARY KEY,
    types SET('foo','bar','baz','quux',...) NOT NULL
)

Я бы хотел получить значение столбца types в виде списка разделенных запятыми целочисленных смещений на основе 1 в этом списке установленных значений, например, "1,3,4" для строки, значение которой "foo,baz,quux". (Этот формат требуется для другого инструмента в системе, над которой я работаю, и по разным практическим причинам я не могу изменить его, чтобы принять что-то другое.) Встроенная функция EXPORT_SET не совсем отличается, но его возвращаемое значение будет иметь вид "1,0,1,1,...", по сути, это набор из 64 элементов, представленный в виде строки.

Есть ли хороший способ SELECT from doc_types и вернуть значения types в формате смещения, который я описал выше, в рамках одного запроса SQL?

Ответы [ 2 ]

2 голосов
/ 30 марта 2009

Попробуйте это:

SELECT CONCAT_WS(',', 
  IF(types & 1 > 0, 1, NULL), 
  IF(types & 2 > 0, 2, NULL), 
  IF(types & 4 > 0, 3, NULL), 
  /* fill in rest here */
  ) as output 
FROM doc_types;
1 голос
/ 18 сентября 2012

Попробуйте это:

SELECT MAKE_SET(types+0, '1', '2', '3') as output FROM doc_types;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...