【发布时间】: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。