带区号-仅在sql impala中保留名称

时间:2018-08-03 07:59:36

标签: sql cloudera impala

我有一个org_name列表,例如

12345678 - West Highland
87654321 - (Vacant) 
12348765 - (Closed)   etc

我只想保留有效的名字-在这种情况下,是西高地

除了数字,我用以下方法去除了所有内容:

SELECT substr(org_name,1,locate(' ',org_name)) as position_num
FROM old;

但是,如果我只想保留名称并命名为:name,该怎么办? 是摆脱名称之类的三种方法

- (Vacant) 
- (Closed) 

 = empty

2 个答案:

答案 0 :(得分:0)

也许不是最有效的方法

SELECT 
    CASE WHEN locate('(Closed)', org_name) THEN split_part(org_name, '-', 1)
    CASE WHEN locate('(Vacant)', org_name) THEN split_part(org_name, '-', 1)
    ELSE org_name
    END
FROM old

这也许也可以,但是我对正则表达式语法不确定

SELECT 
    CASE WHEN regex_like(org_name, '(\\(Closed\\)|\\(Vacant\\))') THEN split_part(org_name, '-', 1)
    ELSE org_name
    END
FROM old

答案 1 :(得分:0)

如果我做对了,我可以建议您使用正则表达式的功能来选择/修改/删除所需的内容。

示例:

SELECT name
FROM table
WHERE REGEXP_LIKE (name, '^A(*)');

此REGEXP_LIKE示例将返回以'A'开头的名称。