【问题标题】:SUB Special Char needs to be removed from Column in TeradataSUB 特殊字符需要从 Teradata 的列中删除
【发布时间】:2021-08-27 08:35:07
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: sql teradata


    【解决方案1】:

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

    6706 字符串包含不可翻译的字符。

    如果您的输入列是 LATIN,您必须确保 oTranslate所有 参数都是 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
    

    【讨论】:

    • 使用 UNICODE 的 OTranslate 命令仍然出错。以下是列中存在的值,这些值导致只想从中删除特殊字符的问题。有什么办法可以将字符替换为空白。 01:(20) 02:(20) 01:(20)
    • 查看我修改后的答案。如果仍然失败,您可能在 syslib 中有旧版本的 oTranslate,切换到 td_sysfnlib.oTranslate 应该可以解决此问题。
    • td_sysflib.oTranslate 仍然出现同样的错误
    • 01:SUBSUB(20SUBSUBSUB)
    • 这是拉丁语,拉丁语版本应该可以。
    猜你喜欢
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 2015-06-19
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    相关资源
    最近更新 更多