我有一个查询,我需要从字符串中删除第一个和最后一个引用以在子句中使用它。当我运行以下查询::
with t as (
select '1,2,3' x from dual)
select translate(x, ' '||chr(39)||chr(34), ' ' ) from t
它给出结果> 1,2,3
但是当我运行以下查询::
时 select * from care_topic_templates where care_topic_id in (
with t as (
select '1,2,3' x from dual)
select translate(x, ' '||chr(39)||chr(34), ' ' ) from t
);
它给出了这个错误> ORA-01722: invalid number
。
答案 0 :(得分:2)
因为您正在将整数id
与字符串进行比较,该字符串看起来像'1,2,3'
- 并且即使在使用translate()
的奇怪替换之后,此字符串也无法转换为整数。字符串不是列表。
您可以使用like
和相关子查询执行您想要的操作:
select *
from care_topic_templates
where exists (select 1
from (select '1,2,3' as x from dual) x
where ',' || x || ',' like '%,' || care_topic_id || ',%'
);
或者,在您的情况下:
select *
from care_topic_templates
where exists (select 1
from (select '1,2,3' as x from dual) x
where ',' || translate(x, ' '||chr(39)||chr(34), ' ') || ',' like '%,' || care_topic_id || ',%'
);
这是遵循您的查询逻辑。还有其他方法来表达这种逻辑。