[英]Oracle SQL Invalid Number Error with Strings
我有这样的查询...
SELECT 1,2,3
FROM (SELECT CASE WHEN something THEN TO_CHAR(1)... END,2,3
FROM tables WHERE condtions)
WHERE 1 NOT LIKE 'String'
所有列都是varchar2,在此查询中,我指向内部case语句时收到“ Invalid Number”错误。 内部查询单独运行良好..如果删除外部WHERE条件,则整个查询运行良好。
我知道这与SQL Optimizer有所关系,但是我在这里做错了什么,如何解决呢? 对字符串或外部select语句使用To_CHAR不起作用...
更新以更好地理解,
SELECT COL1, COL2, COL3 FROM (
SELECT CASE WHEN LOGIC THEN TO_CHAR(1) ELSE TO_CHAR(0) END AS COL1,
COUNT(SOME_COL) AS COL2 , COUNT(SOME_COL2) AS COL3 FROM TABLES WHERE CONDTIONS
) WHERE COL1 NOT LIKE ‘0’
有人告诉我Oracle SQL Optimizer正在干扰并导致上述错误,并且查询必须以其他方式编写。
通过用反斜线括起来,表明1是列名。
SELECT 1,2,3 FROM (SELECT CASE WHEN something THEN TO_CHAR(1)... END,2,3
FROM tables
WHERE condtions) WHERE `1` NOT LIKE 'String'
您需要使用适当的列名(以字母开头)-1,2,3将不起作用(除非加引号):
create table tab1 as
select 1 as pk from dual
union all
select 2 as pk from dual
union all
select 3 as pk from dual;
SELECT col1,col2,col3
FROM (SELECT (CASE WHEN 1=2 THEN TO_CHAR(1) else to_char(2) END) as col1 ,
2 as col2,
3 as col3
FROM tab1 WHERE pk > 1)
WHERE col1 NOT LIKE '%1%'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.