Oracle中的Case语句,其中一个条件返回实际列

tem*_*ope 5 sql oracle

我正在TOAD上的ORACLE中编写CASE语句,如果满足某些条件则返回实际值,否则返回一个新字符串.

以下作品,

SELECT (CASE WHEN COLUMN_NAME = 'SOMETEXT' THEN 'SOMEOTHERTEXT' ELSE 'DIFFERENTTEXT' END) NEWCOLUMNNAME
FROM TABLENAME
Run Code Online (Sandbox Code Playgroud)

以下不起作用,

SELECT (CASE WHEN COLUMN_NAME = 'SOMETEXT' THEN 'SOMEOTHERTEXT' ELSE COLUMN_NAME END) NEWCOLUMNNAME
FROM TABLENAME
Run Code Online (Sandbox Code Playgroud)

我收到以下错误 -

ORA-12704:字符集不匹配

有帮助吗?

Dav*_*itz 6

在结果类型中混合varchar和nvarchar.
字符串文字的默认类型是varchar,您的列是nvarchar类型.

放在N字符串文字之前,以便将它们定义为nvarchar.

https://docs.oracle.com/cd/E18283_01/server.112/e17118/sql_elements003.htm#i42617


create table TABLENAME (COLUMN_NAME nvarchar2(100));
insert into TABLENAME (COLUMN_NAME) values ('ABC');


select  case 
            when column_name = 'SOMETEXT' 
            then 'SOMEOTHERTEXT' 
            else column_name 
        end                     as  newcolumnname

from    tablename
;
Run Code Online (Sandbox Code Playgroud)

ORA-12704:字符集不匹配

(第一个N是防止比较的隐式强制转换,第二个是N防止错误 - case语句的所有结果表达式应该是相同的类型)

select  case 
            when column_name = N'SOMETEXT' 
            then N'SOMEOTHERTEXT' 
            else column_name 
        end                     as  newcolumnname

from    tablename
;
Run Code Online (Sandbox Code Playgroud)
NEWCOLUMNNAME
-------------
ABC
Run Code Online (Sandbox Code Playgroud)