我在TOAD上的ORACLE中编写CASE语句,如果满足某些条件则返回实际值,否则返回一个新字符串。
以下作品,
SELECT (CASE WHEN COLUMN_NAME = 'SOMETEXT' THEN 'SOMEOTHERTEXT' ELSE 'DIFFERENTTEXT' END) NEWCOLUMNNAME
FROM TABLENAME
以下不起作用,
SELECT (CASE WHEN COLUMN_NAME = 'SOMETEXT' THEN 'SOMEOTHERTEXT' ELSE COLUMN_NAME END) NEWCOLUMNNAME
FROM TABLENAME
我收到以下错误 -
ORA-12704:字符集不匹配
任何帮助?
答案 0 :(得分: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
;
ORA-12704:字符集不匹配
(第一个N
是为了防止比较的隐式强制转换,第二个N
可以防止错误 - case语句的所有结果表达式应该是相同的类型)
select case
when column_name = N'SOMETEXT'
then N'SOMEOTHERTEXT'
else column_name
end as newcolumnname
from tablename
;
NEWCOLUMNNAME
-------------
ABC