我正在使用Presto拆分一个字母数字字符串,该字符串看起来像下面的AB1234CD到AB1234 JA4567EF.8到JA4567
我正在尝试移除字母表和字符串末尾字母表之后的任何内容。
发布于 2019-10-17 19:24:53
根据您提供的示例,您希望保留
之后
然后抛弃一切。
对此,regexp_extract是一个完美的契合。
presto:default> SELECT regexp_extract('AB1234CD', '^[a-zA-Z]*[0-9]*');
_col0
--------
AB1234
(1 row)(在Presto 322上测试)
发布于 2019-10-19 10:32:56
在查看了示例和查询之后,可以有两种可能的解决方案:
从字母开始提取字符串,然后是numbers
。
查询的以下部分用于生成测试数据,您可以用select查询替换它。
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 datasethttps://stackoverflow.com/questions/58438660
复制相似问题