【问题标题】:Teradata - Finding Rows with Special Placeholder CharactersTeradata - 查找具有特殊占位符的行
【发布时间】:2020-07-21 11:45:05
【问题描述】:

我在 Teradata 中有一张表,它可以从多个来源累积产品,并将它们放入一个大表中。其中一些源设置为 UTF-8 源,但其目标是拉丁编码。这导致一些记录插入带有白色问号的黑色菱形。我将它们合并到的表是 UNICODE,但我希望能够标记包含这些占位符字符的行。我已经尝试将 Unicode 转换为拉丁函数,但这也会对合法的非拉丁 Unicode 字符(如外语)做出反应。

These are the characters I'm after

有什么方法可以识别和标记包含此特定占位符字符的记录?任何信息将不胜感激!

【问题讨论】:

    标签: unicode database-design character-encoding teradata


    【解决方案1】:

    您可以使用CHAR2HEXINT 函数进行验证,但这似乎是错误替换字符(x'1A' 拉丁文或 U+FFFD Unicode)。找到该特定值的诀窍是生成比较值。

    POSITION(CHR(26) IN Latin_Column) > 0
    

    POSITION(TRANSLATE(CHR(26) USING LATIN_TO_UNICODE WITH ERROR) IN Unicode_Column) > 0
    

    【讨论】:

    • 跟进问题,你知道如何摆脱它们吗? OReplace 和 OTranslate 都会引发“不可翻译的字符”错误。
    • 应该使用 TRANSLATE(CHR(26) USING LATIN_TO_UNICODE WITH ERROR) 作为要更改的字符串来处理 Unicode 字段。对于拉丁语字段,诀窍是所有参数都必须是 Unicode 或全部是拉丁语(因为否则会隐式转换为 Unicode,这将失败)。因此,要么明确地将 TRANSLATE Latin_column USING LATIN_TO_UNICODE WITH ERROR) 作为输入字符串并搜索该值,要么明确地将 TRANSLATE('String_Literal' USING UNICODE_TO_LATIN) 作为参数提供的任何文字值 - 因为文字是 Unicode - 并搜索 CHR(26)..
    猜你喜欢
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    • 2015-06-19
    • 1970-01-01
    • 2021-12-23
    • 2018-09-25
    相关资源
    最近更新 更多