首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用String的Oracle SQL无效编号错误

使用String的Oracle SQL无效编号错误
EN

Stack Overflow用户
提问于 2013-03-27 08:40:23
回答 2查看 1.6K关注 0票数 0

我有这样的疑问..。

代码语言:javascript
复制
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语句。内部查询分别运行良好。如果删除外部WHERE condtion,则整个查询运行良好。

我知道这与SQL优化器有关,但是我在这里做错了什么,我如何解决这个问题呢?对字符串或外部select语句使用To_CHAR不起作用.

为了更好地理解,

代码语言:javascript
复制
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优化器正在干扰并导致上述错误,并且必须以不同的方式编写查询。

EN

回答 2

Stack Overflow用户

发布于 2013-03-27 08:46:05

指示1是列名,方法是用后勾包围它。

代码语言:javascript
复制
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'
票数 0
EN

Stack Overflow用户

发布于 2013-03-27 11:24:01

您需要使用正确的列名(以字母开头)- 1,2,3不起作用(除非引用):

代码语言:javascript
复制
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%'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15654665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档