我对以下查询感到震惊。请帮帮我。
select
case when column in ('1 Chelsea'|| chr(38) ||
'Friend (2)','5 Manchester''s Song'||chr(38)||
'Hamilton') then 'Others' else N/A
from FA
以上查询的输出
1 Chelsea & Friend (2) N/A
5 Manchester's Song&Hamilton Others
从上面的查询中,输出应该类似于以下输出
1 Chelsea & Friend (2) Others
5 Manchester's Song&Hamilton Others
请有人帮我解决这个问题。另请注意,我无法使用SET DEFINE OFF
。
答案 0 :(得分:1)
SQL字符串中的''必须与另一个'进行转义'。因此,'my ''house'''
实际上意味着my 'house'
。
因此'5 Manchester''s Song'
与5 Manchester''s Song
不匹配,但5 Manchester's Song
。您必须改为查询'5 Manchester''''s Song'
。
顺便说一句:没有必要使用chr(38),你可以使用&直接:
select
case when column in (
'1 Chelsea & Friend (2)',
'5 Manchester''''s Song&Hamilton'
) then 'Others' else 'N/A' end
from FA;
答案 1 :(得分:0)
我建议两件事:
CHR(38)
摆脱替换运算符 &
大多数基于GUI的客户端工具能够执行 SQL * Plus命令。在会话或 SQL工作表的 SQL Developer 中执行一次,它不会再次提示您输入替代值:
SET DEFINE OFF
' 5曼彻斯特'''''
使用引用字符串文字技术,它可以写成:
q'[Manchester's Song&Hamilton]'
例如,
SQL> SET DEFINE OFF
SQL> WITH DATA(a, b) AS(
2 SELECT 1, 'Chelsea & Friend (2)' FROM dual UNION ALL
3 SELECT 5, q'[Manchester's Song&Hamilton]' FROM DUAL UNION ALL
4 SELECT 6, 'abcd' FROM DUAL
5 )
6 SELECT a,
7 CASE
8 WHEN b IN ('Chelsea & Friend (2)',q'[Manchester's Song&Hamilton]')
9 THEN 'Others'
10 ELSE 'N/A'
11 END status
12 FROM DATA
13 /
A STATUS
---------- ------
1 Others
5 Others
6 N/A
SQL>
关于引用字符串文字技术的更详细示例,请参阅此答案How to anticipate and escape single quote ' in oracle