oracle翻译函数给出了转换错误的数量

时间:2016-06-19 19:23:50

标签: sql oracle

我有一个查询,我需要从字符串中删除第一个和最后一个引用以在子句中使用它。当我运行以下查询::

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

1 个答案:

答案 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 || ',%'
             );

这是遵循您的查询逻辑。还有其他方法来表达这种逻辑。