删除特殊字符chr(191)和其他SQL



unix脚本和Oracle命令的新手,所以很容易。。。

我有一个字段填充了不正确的字符,特别是chr(191)"反转?签名'。。

我有这个样本代码

UPDATE rc.rc_descripton
SET desc_description = 
                        (
                         CASE 
                            WHEN desc_description LIKE '%[^a-zA-Z0-9]%' 
                                  THEN Replace(REPLACE( desc_description, SUBSTRING( desc_description, PATINDEX('%[~,@,#,$,%,&,*,^,&,%,*,(,)]%', desc_description), 1 ),''),'-',' ')
                            ELSE desc_description
                          END
                         )

尽管我最初的UPDATE命令是:-

UPDATE rc.rc_description
SET    desc_description  = REPLACE(desc_description, CHR(191), ' ')
WHERE  desc_description LIKE '%' || CHR(191) || '%'

我想把上面的代码合并到我上面发布的主要示例代码中。

我确实找到了一个之前使用的unix脚本:

# Replace offending characters with the intending/valid characters 
sed s/–/-/g $1 | sed s/’/'/g | sed s/‘/'/g | sed s//'/g | sed s//'/g | sed s//"/g | sed s//"/g | sed s/“/"/g | sed s/”/"/g | sed s/—/-/g | sed s//-/g | sed s/…/.../g | sed s/‑/-/g | sed 's/½/1/2/g' | sed 's/¼/1/4/g' | sed 's/¾/3/4/g' | sed 's/· //g' | sed s/°/./g | sed s/•/*/g | sed s/ //g > $1.out

但是我无法将unix代码转换为Oracle update命令。。

请告知正确的UPDATE命令,以满足上述所有特殊字符集的需要,并将CHR(191)也考虑在内。。。

真诚地,A.B.

我得到了以下语句:-

 select desc_description,
  length(dbms_lob.substr(desc_description, 3500, 1)) len,
  lengthb(dbms_lob.substr(desc_description, 3500, 1)) lenb,
  convert(replace(translate(dbms_lob.substr(desc_description, 3500, 1), ' abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-=`~!@#$%^&*()_+,./<>?;'':"[]{}|',' '), ' ', ''),'us7ascii') bad_char_replaced,
  rawtohex(convert(replace(translate(dbms_lob.substr(desc_description, 3500, 1), ' abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-=`~!@#$%^&*()_+,./<>?;'':"[]{}|',' '), ' ', ''),'us7ascii')) bad_char_replaced_hex ,
  -------
  convert(dbms_lob.substr(desc_description, 3500, 1),'us7ascii') converted
  -------
  from rc.rc_description
  WHERE  desc_description LIKE '%' || CHR(191) || '%' and
  desc_cras_number = '20140096849';

前面的文本是:车辆的B柱有。。。。。。

After文本为:车辆??s B柱有。。。。。。

我可以获得上面的查询来删除这些吗???用撇号还是双引号?或者,如果这会扭曲数据,那么jst将使用一个空空间。

试试这个用字符串替换输入,regex是字母数字的,你可以很容易地操作它T-SQL语法

DECLARE @input AS NVARCHAR(MAX) = '124567890qwertyuioopasdfghjklzx cvbnm,;#$%^&*(!)$^'
DECLARE @output AS NVARCHAR(MAX) = @input
DECLARE @RegexString AS NVARCHAR(max) = '[^a-zA-Z0-9 ]'
WHILE PATINDEX('%'+@RegexString+'%',@output)>0
BEGIN
    SET     @output=  STUFF(@output,PATINDEX('%'+@RegexString+'%',@output),1,'')
    PRINT   @output
END
SELECT @input , @output

最新更新