我需要查找个人在问卷中输入无效答案的案例。有效响应列表在表格中保存为以分号分隔的字符串,如下所示:“starfish; bass; cod; dolphin; shark;”
如果我对文本值运行查询,它会告诉我“starfish”不在列表中,因为我没有将值分开:
SELECT 'starfish' as value, 'starfish;bass;cod;dolphin;shark;' as 'is not in this list'
WHERE 'starfish' NOT IN ('starfish;bass;cod;dolphin;shark;')
我可以通过一个相当手动的过程,我将分号列表转换为引号和逗号列表。当我这样做时,它有效:
SELECT 'starfish' as value, 'starfish'',''bass'',''cod'',''dolphin'',''shark' as 'is not in this list'
WHERE 'starfish' NOT IN ('starfish','bass','cod','dolphin','shark')
现在,这就是我的问题所在: 我想通过让我的查询将分号字符串转换为撇号/逗号分隔列表来保存一些步骤。但是,当我这样做时,SQL就像我的值不在列表中一样。
SELECT 'starfish' as value, (''''+REPLACE(LEFT(RTRIM('starfish;bass;cod;dolphin;shark;'),LEN(RTRIM('starfish;bass;cod;dolphin;shark;'))-1),';',''',''')+'''') as 'is not in this list'
WHERE 'starfish' not in (''''+REPLACE(LEFT(RTRIM('starfish;bass;cod;dolphin;shark;'),LEN(RTRIM('starfish;bass;cod;dolphin;shark;'))-1),';',''',''')+'''')
似乎SQL无法将查询生成的有效值列表识别为列表。有什么方法可以修复吗?
答案 0 :(得分:0)
您可以尝试使用LIKE运算符和通配符。
select * from
(
SELECT 'starfish' as value, 'starfish;bass;cod;dolphin;shark;' as notlist from dual
)
WHERE ';'|| notlist not like '%;'||value||';%';