对于专家来说,这可能是一个简单的问题。
这是我的要求。我必须使用DECODE
并匹配包含逗号分隔值的字符串。
以下是示例SQL:'A'
是表中的列值,'A,B'C'
是逗号分隔的字符串,作为表达式传递给sql
SELECT DECODE('A' , 'A,B,C', 'true', 'false') FROM DUAL;
上面的SQL应该返回true,因为csv表达式包含'A'
。
请帮我写这个SQL
答案 0 :(得分:1)
首先,不要使用decode()
。使用ANSI标准CASE
语句。您的问题的答案是您可以使用LIKE
:
SELECT (CASE WHEN ',' || 'A,B,C' || ',' LIKE '%,' || 'A' || ',%'
THEN 'true' ELSE 'false'
END)
FROM DUAL;
注意:字符串连接只是因为我怀疑值是变量。更简单的形式是:
SELECT (CASE WHEN ',A,B,C,' LIKE '%,A,%'
THEN 'true' ELSE 'false'
END)
FROM DUAL;
答案 1 :(得分:0)
如果我理解你的问题,你是想确定一个字符串是否在另一个字符串中?
select case when instr( 'A,B,C', 'A' ) > 0
then 'True'
else 'False'
end
from dual
添加DECODE版本
select decode( instr( 'A,B,C', 'A' ), 0, 'False', 'True' )
from dual
答案 2 :(得分:0)
使用DECODE,您可以这样做:
SELECT DECODE(INSTR('A,B,C', 'A'), 0, 'false', 'true') FROM DUAL;
,其中
如果列值不在逗号分隔的字符串中,INSTR('Comma separated string', 'column value to match')
将返回0。在你的例子中,
INSTR('A,B,C', 'A')
将返回大于0的值,INSTR('D,B,C', 'A')
将返回0.因此,DECODE可以检查INSTR()的返回值是否为0然后返回false,否则返回true。