【问题标题】:regexp_similar '^.$' issues in teradatateradata 中的 regexp_similar '^.$' 问题
【发布时间】:2016-11-07 15:49:36
【问题描述】:

对于数据清理,我的程序中有很多硬编码值。我正在尝试将这些值放入表中。这种擦洗的条件之一是找到字符的长度和代码(character_length(name) = 1)

但是当我尝试使用 ^.$ 来模拟这个时,它没有捕捉到像 ¿¥Ã 这样的值

如果我做错了什么,请告诉我。

当我运行下面的代码时,我看到这 3 个值 ¿、¥、Ã

select name from email_table
where character_length(name) = 1
and name not in
    (select name from email_table
    where regexp_similar(translate(name USING LATIN_TO_UNICODE WITH ERROR),'^.$', 'i') = 1)

【问题讨论】:

  • 听起来很像 Teradata 的正则表达式匹配字节序列而不是字符/代码点字符串。
  • 这对我来说很好用。当您的源列是 LATIN 时,为什么要使用 TRANSLATE?
  • 是的。源列是拉丁文,如果不使用翻译,我会收到消息 SELECT Failed。 [6706] 字符串包含不可翻译的字符。
  • @dnoeth 我已经通过创建表和手动插入值进行了如下测试,并测试如下 select name from unicode_table where regexp_similar(unicode_table,'^.$', 'i')=1 并且它仍然不选择上述值
  • 找到这些字符的原始列的结果是什么?你写的是拉丁文,但00A5 是UNICODE。

标签: regex teradata


【解决方案1】:

问题似乎是由于版本。 我们在不同的服务器上有 TD14 和 TD 15,我做了以下查询 当 regexp_similar('¥','^.$', 'i')=1 时选择大小写 然后'Y' 否则'N' 作为输出结束; 在 TD 14 的情况下,我得到的输出为“N”,而在 TD 15 的情况下,答案是“Y”。

【讨论】:

    猜你喜欢
    • 2015-01-19
    • 2016-10-25
    • 2014-12-24
    • 2018-08-16
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    • 2012-12-25
    • 2021-10-04
    相关资源
    最近更新 更多