簡體   English   中英

帶字符串的Oracle SQL無效數字錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM