2

我在 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 元素位集。

有没有什么好的方法可以在单个 SQL 查询中以我上面描述的偏移格式SELECT from doc_types获取值?types

4

2 回答 2

2

尝试这个:

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;
于 2009-03-30T18:42:08.700 回答
1

尝试这个:

SELECT MAKE_SET(types+0, '1', '2', '3') as output FROM doc_types;
于 2012-09-18T15:46:28.127 回答