SUB 特殊字符需要从 Teradata 中的列中删除

SUB Special Char needs to be removed from Column in Teradata

需要从 Teradata 的列中删除 SUB 特殊字符,已尝试使用以下替换命令但它不起作用。

regexp_replace(column, X'1A', '', 1, 0, 'i')
OREPLACE(Column, X'1A' , ' ')

已尝试使用字母数字值将其删除,但一些其他字符也随之被删除,只需从字符串中删除该 SUB 字符。

 regexp_replace(column, '[^0-9a-z]', '', 1, 0, 'i')

处理 错误字符 在 Teradata 中有点棘手,任何显式或隐式转换都会导致

6706 The string contains an untranslatable character.

如果您的输入列是 LATIN,则必须确保 oTranslateall 参数是 LATIN 以避免转换。如果输入是UNICODE 所有参数必须是UNICODE.

CREATE VOLATILE TABLE vt
 (
   col_latin   VARCHAR(20) CHARACTER SET Latin
  ,col_unicode VARCHAR(20) CHARACTER SET Unicode
 ) ON COMMIT PRESERVE ROWS;
  
INSERT INTO vt
 (
   'hello' || Chr(26) || 'world'
  ,Translate('hello' || Chr(26) || 'world' USING latin_to_unicode WITH ERROR)
 );
 
SELECT 
   OTranslate(col_unicode -- UNICODE
             ,Chr(26)     -- LATIN
             ,' '         -- UNICODE
             )
FROM vt; 
-- fails
             
SELECT
   OTranslate(col_latin   -- LATIN
             ,Chr(26)     -- LATIN
             ,' '         -- UNICODE
             )
FROM vt;
-- fails

SELECT 
   OTranslate(col_unicode -- UNICODE
             ,Translate(Chr(26) USING latin_to_unicode WITH ERROR) -- UNICODE
             ,' '         -- UNICODE
             )
  ,OTranslate(col_latin   -- LATIN
             ,Chr(26)     -- LATIN
             ,Translate('' USING unicode_to_latin) -- LATIN
             )
FROM vt;
-- returns both 'hello world' successfully