【问题标题】:Oracle Encoding: Can't Replace Vertical Bar / Pipe due to non-ascii valuesOracle 编码:由于非 ascii 值,无法替换垂直条/管道
【发布时间】:2018-07-25 21:17:30
【问题描述】:

我正在尝试在 Oracle 中处理 ETL 表,该表恰好有 20 列,其中 3 列恰好是 clob。我最喜欢使用“|”作为我的分隔符,但是当我查询它时,我遇到了一个包含以下数据“¦1XYZ”的列。最有趣的部分是当我进行替换/正则表达式时,它并没有改变管道。我做了一个 rawtohex,它的值是:'C2A631464753'。有没有办法处理真正的价值 '¦1XYZ' ? (转换/翻译运气不好)

由于 utf 字符,我无法使用 SSIS 将 Oracle 数据提取到平面文件中。我正在使用 sql*plus 假脱机,然后使用 Teradata TPT 进行更新插入。由于我的时间表落后了,所以在这一点上非常绝望。

是的,rawtohex 和 ¦1XYZ 与公司数据用途不完全匹配。

【问题讨论】:

    标签: oracle replace ascii etl utf


    【解决方案1】:

    先用竖线 (|) 替换所有 (¦) 字符怎么样?

    类似这样的:(这里A6¦ 字符的十六进制表示)

    select replace('¦1XYZ',utl_raw.cast_to_varchar2(hextoraw('A6')),'|') from dual
    

    当然你会在整个原始字符串上运行replace

    【讨论】:

    • 我明天早上试试。我从未见过 utl_raw.cast_to_varchar2(hextoraw('A6')),'|')。感谢您的想法!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 1970-01-01
    • 2018-09-26
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多