删除Hive中的前导特殊字符

时间:2017-01-12 12:51:24

标签: sql hive hiveql

我正在尝试删除主要的特殊字符(可能是 - “$& ^ @ _) 来自col1 col2 1 0 2 0.02 3 0 4 0 5 0.12 6 0 7 0 8 0 9 0.91 10 0 11 0 12 0 13 1.13 使用Hive。

"Persi és Levon Cnatówóeez 但这会删除所有特殊字符。

我期待类似于

的输出

select REGEXP_REPLACE('“Persi és Levon Cnatówóeez', '[^a-zA-Z0-9]+', '')

2 个答案:

答案 0 :(得分:2)

试试这个:

select REGEXP_REPLACE('"Persi és Levon Cnatówóeez', '[^a-zA-Z0-9\u00E0-\u00FC ]+', '');

我在Hive上尝试了它,它取代了任何不是字母(a-zA-Z)的字符(0-9)或重音字符(\ u00E0- \ u00FC)。

0: jdbc:hive2://localhost:10000> select REGEXP_REPLACE('"Persi és Levon Cnatówóeez', '[^a-zA-Z0-9\u00E0-\u00FC ]+', '');
+----------------------------+--+
|            _c0             |
+----------------------------+--+
| Persi és Levon Cnatówóeez  |
+----------------------------+--+
1 row selected (0.104 seconds)
0: jdbc:hive2://localhost:10000>

答案 1 :(得分:0)

来自Hive文档:

  

regexp_replace(string INITIAL_STRING,string PATTERN,string REPLACEMENT)

     

返回将INITIAL_STRING中与PATTERN中定义的java正则表达式语法匹配的所有子字符串替换为REPLACEMENT实例的字符串。例如,regexp_replace(" foobar"," oo | ar","")返回' fb。'请注意,在使用预定义的字符类时需要注意:使用' \ s'因为第二个参数将匹配字母s; ' \ S'有必要匹配空白等。

参考:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF

你应该这样做:

select REGEXP_REPLACE('“Persi és Levon Cnatówóeez', '^[\!-\/\[-\`]+', '')

我没有Hive正确知道尝试此代码,但这个想法应该是正确的。在第二个字段中,您必须放置要替换的内容,而不是要保留在字符串中的内容。在这种特殊情况下,这应该删除(用空字符串''替换)行开头的每个后续字符,即在!到/,或在[指向ASCII表格的范围内。