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