如何在包含两个VARCHAR2值时忽略空格



我面临一个比较问题,我不知道如何强制oracle忽略空格

我尝试过修剪功能和替换(列,","(,但仍然是

甚至我也尝试将to_char用于两列

这是查询

select 
replace(nvl(MEMBER_CARD_NO,'x'),' ','') x,
replace(nvl(COL_CRD_ID,'x'),' ','') y,
case when 
replace(nvl(MEMBER_CARD_NO,'x'),' ','')  =  
replace(nvl(COL_CRD_ID,'x'),' ','')  then 'y' else 'no'end z
from tb_sales
where
case when 
replace(nvl(MEMBER_CARD_NO,'x'),' ','')  =  
replace(nvl(COL_CRD_ID,'x'),' ','')  then 'y' else 'no'end ='no'

每个列的数据类型如下所述

  • MEMBER_CARD_NO:VARCHAR2(30字节(

  • COL_CRD_ID:VARCHAR2(30字节(

下面是一个记录的示例

x       |y               |z
17140974|"17140974  "    |no

当我复制时,第二个显示双引号

这听起来像是ASCII和Unicode的问题,当使用varchar2时,需要在像这样的替换之前使用char'N'

select 
replace(nvl(MEMBER_CARD_NO,'x'), 'W','') x,
replace(nvl(COL_CRD_ID,'x'),'W','') y,
case when 
replace(nvl(MEMBER_CARD_NO,'x'),'W','')  =  
replace(nvl(COL_CRD_ID,'x'),'W','')  then 'y' else 'no'end z
from tb_sales
where
case when 
replace(nvl(MEMBER_CARD_NO,'x'),'W','')  =  
replace(nvl(COL_CRD_ID,'x'),'W','')  then 'y' else 'no'end ='no' 

如果不起作用,则使用regexp_replace(coulmn, '[[:space:]]*','')而不是replace(coulmn, ' ','')

您有双引号空格,因此需要删除这两个空格。translate()方便于:

where x = translate(y, 'a "', 'a')

这里有一个db<gt;不停摆弄

最新更新