使用presto拆分字母数字字符串

时间:2019-10-17 18:23:53

标签: presto

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

我正在尝试删除字母以及字符串末尾的所有字母。

2 个答案:

答案 0 :(得分:1)

根据您提供的示例,您想保留

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

随后丢弃所有内容。

为此regexp_extract非常合适。

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

(在Presto 322上测试)

答案 1 :(得分:0)

看到示例并进行查询后,可以有两种可能的解决方案:

  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