Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在sql中从字符串中删除双字节空间_Sql_Oracle_Unicode - Fatal编程技术网

如何在sql中从字符串中删除双字节空间

如何在sql中从字符串中删除双字节空间,sql,oracle,unicode,Sql,Oracle,Unicode,我在数据库表中有一列保存项目编号。其中一个项目包含双字节空间**400-000361(SZ17-20)**。当此项目的详细信息从系统导出时,它会在csv中删除此空间,并显示如下项目编号**400-000361(SZ17-20)** 当我尝试使用query将导出的数据与系统的数据进行比较时,它不会列出此项,因为该数字现在已更新。 是否有任何方法可以忽略双空格字符以使用正则表达式或其他方法获得匹配项? 我试着按照这个方法做,但不起作用 SELECT REGEXP_REPLACE('400-00036

我在数据库表中有一列保存项目编号。其中一个项目包含双字节空间
**400-000361(SZ17-20)**
。当此项目的详细信息从系统导出时,它会在csv中删除此空间,并显示如下项目编号
**400-000361(SZ17-20)**

当我尝试使用query将导出的数据与系统的数据进行比较时,它不会列出此项,因为该数字现在已更新。 是否有任何方法可以忽略双空格字符以使用正则表达式或其他方法获得匹配项? 我试着按照这个方法做,但不起作用

SELECT REGEXP_REPLACE('400-000361(SZ17-20)', '\s{2,}', ' ') T FROM dual 
WHERE '400-000361(SZ17-20)' = TRIM(REGEXP_REPLACE('400-000361(SZ17-20)', '([[:space:]]{2,}|[[:cntrl:]])', ' '))

您没有双空格或双字节空格,或者实际上没有任何空格。您有一个,在导出过程中,它显然被转换为标准空格

通过
dump()
,您可以看到您真正拥有的功能:

并与修改后的版本进行比较:

SELECT dump('400-000361(SZ17-20)', 1016) FROM dual;

Typ=96 Len=19 CharacterSet=AL32UTF8: 34,30,30,2d,30,30,30,33,36,31,28,53,5a,31,37,2d,32,30,29
                                                                   ^^
您可以使用
replace()
和等效的Unicode字符串转换表数据:

SELECT REPLACE('400-000361(SZ17-20)', unistr('\ff08'), '(') T FROM dual 
WHERE '400-000361(SZ17-20)' = REPLACE('400-000361(SZ17-20)', unistr('\ff08'), '(')

400-000361(SZ17-20)

SELECT REPLACE('400-000361(SZ17-20)', unistr('\ff08'), '(') T FROM dual 
WHERE '400-000361(SZ17-20)' = REPLACE('400-000361(SZ17-20)', unistr('\ff08'), '(')

400-000361(SZ17-20)