【问题标题】:Strip numbers - leave only the name in sql impala去除数字 - 在 sql impala 中只保留名称
【发布时间】:2018-08-03 07:59:35
【问题描述】:

我有一个 org_names 列表,例如

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

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

除数字外,我将所有内容都删除了:

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

但是如果我只想保留名字并命名它,你怎么做:名字? 三是摆脱名字之类的方法

- (Vacant) 
- (Closed) 

 = empty

【问题讨论】:

  • 您需要明确如何区分有效和无效的名称。
  • -(空缺)-(已关闭)不是名字
  • 哦,真的,这没什么用。 UNMANAGED 怎么样,例如,这是一个名称吗?同样,您需要澄清区分有效名称和错误字符串(无论您想如何称呼它们)的逻辑。
  • 您好,职位编号与第一个姓氏之间带有 - 如果职位已关闭,则不再有与职位编号相关联的名称。数字仍然存在,但职位是 -(空缺)或 -(关闭)
  • 看起来像 12233445 - David Vincent 56675678 -(空缺) 34454556 - Ben Smith 89786756 -(已关闭)

标签: sql cloudera impala


【解决方案1】:

也许不是最有效的方法

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

【讨论】:

  • 不起作用 - 结果:22000 - 未管理 22001 - 未管理 22002- 未管理等
【解决方案2】:

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

例子:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-14
    相关资源
    最近更新 更多