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