使用替换为in子句

时间:2014-05-21 09:36:56

标签: mysql

使用Json格式将ID存储在DB中

'["1454","474","545"]'

我可以构建列表ID:

SELECT replace
 (replace(
   replace(
     replace('["1454","474","545"]','[','\'')
     ,']','\'')
   ,'"','')    
,',','\',\'')

mySql返回'1454','474','545'

但是当我尝试从这个ID构建列表中列出数据库记录时:

SELECT col FROM table WHERE col in (REPLACE
  (REPLACE(
REPLACE(
    REPLACE('["1454","474","545"]','[','\'')
    ,']','\'')
,'"','')   
,',','\',\''));
即使我在第一个“REPLACE”之前添加了“SELECT”,mySql也会说“0记录”

有任何帮助吗?

2 个答案:

答案 0 :(得分:0)

尝试以下查询,您还需要在in子句中添加select:

SELECT col FROM table WHERE col in (select REPLACE
  (REPLACE(
REPLACE(
    REPLACE('["1454","474","545"]','[','\'')
    ,']','\'')
,'"','')   
,',','\',\''));

答案 1 :(得分:0)

唉,您不能将in与逗号分隔的字符串一起使用。它需要一个元素列表,但不在字符串中。所以,这可以按预期工作:

where x in (1,2,3)

这不会像你期望的那样工作(虽然它确实可以正常工作;

where x in ('1,2,3')

这会查找x的一个值,即字符串'1,2,3'

解决方案是使用MySQL函数find_in_set()

SELECT col
FROM table
WHERE find_in_set(col, REPLACE(REPLACE(REPLACE('["1454","474","545"]', '[','\''
                                              ), ']', '\''
                                      ), '"', ''
                              ), ',', '\',\''
                 );

老实说,你可能会更喜欢这样的事情:

where '["1454","474","545"]' like concat('%;', col, '&%')