【问题标题】:Split Alphanumeric string using presto使用 presto 拆分字母数字字符串
【发布时间】:2020-02-14 17:32:54
【问题描述】:

我正在使用 Presto SQL 来拆分一个字母数字字符串,看起来像这样 AB1234CD 至 AB1234 JA4567EF.8 转 JA4567

我正在尝试删除字符串末尾的字母和字母之后的任何内容。

【问题讨论】:

  • 分享一些代码或者你用过的命令会更好。

标签: presto


【解决方案1】:

根据您提供的示例,您希望保留

  • 前导字母
  • 前导字母后的数字

之后丢弃所有东西。

regexp_extract 非常适合。

presto:default> SELECT regexp_extract('AB1234CD', '^[a-zA-Z]*[0-9]*');
 _col0
--------
 AB1234
(1 row)

(在 Presto 322 上测试)

【讨论】:

    【解决方案2】:

    在看到你的例子和查询后,可能有两种可能的解决方案:

    1. 提取以字母开头后跟数字的字符串
    2. 提取一个六长字符串。

    查询的以下部分用于生成测试数据,您可以将其替换为您的选择查询。

      WITH dataset AS (
      SELECT CAST(ROW('ABC12345DE') AS ROW(id VARCHAR)) AS data)
    

    对于第一个解决方案,有两种可能提取第一次出现或提取所有可能的字符串:

    提取第一个可能的字符串

      with dataset AS (
      SELECT CAST(ROW('AB1234CDE') AS ROW(id VARCHAR)) AS data) 
      SELECT regexp_extract(data.id,'[a-zA-Z]*[1-9]*') AS str from dataset
    

    提取所有可能的字符串

      with dataset AS (
      SELECT CAST(ROW('AB1234CDE123') AS ROW(id VARCHAR)) AS data) 
      SELECT regexp_extract_all(data.id,'[a-zA-Z]*[1-9]*') AS str from dataset
    

    第二个解决方案:

    提取6长字符串

      with dataset AS (
      SELECT CAST(ROW('AB1234CDE') AS ROW(id VARCHAR)) AS data )
      select substr(data.id, 1, 6)  as str from dataset
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-22
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      • 2015-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多