【发布时间】:2020-02-14 17:32:54
【问题描述】:
我正在使用 Presto SQL 来拆分一个字母数字字符串,看起来像这样 AB1234CD 至 AB1234 JA4567EF.8 转 JA4567
我正在尝试删除字符串末尾的字母和字母之后的任何内容。
【问题讨论】:
-
分享一些代码或者你用过的命令会更好。
标签: presto
我正在使用 Presto SQL 来拆分一个字母数字字符串,看起来像这样 AB1234CD 至 AB1234 JA4567EF.8 转 JA4567
我正在尝试删除字符串末尾的字母和字母之后的任何内容。
【问题讨论】:
标签: presto
根据您提供的示例,您希望保留
之后丢弃所有东西。
regexp_extract 非常适合。
presto:default> SELECT regexp_extract('AB1234CD', '^[a-zA-Z]*[0-9]*');
_col0
--------
AB1234
(1 row)
(在 Presto 322 上测试)
【讨论】:
在看到你的例子和查询后,可能有两种可能的解决方案:
查询的以下部分用于生成测试数据,您可以将其替换为您的选择查询。
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
第二个解决方案:
with dataset AS (
SELECT CAST(ROW('AB1234CDE') AS ROW(id VARCHAR)) AS data )
select substr(data.id, 1, 6) as str from dataset
【讨论】: