Amazon Redshift SQL正则表达式:提取列表首个数字元素方法
提取Redshift列表字符串中的第一个数字
别担心,就算完全没接触过正则表达式,也能轻松搞定这个需求!在Amazon Redshift里,我们有两种简单的方法可以提取你要的第一个数字,我给你详细说清楚:
方法一:用正则表达式函数(更通用健壮)
Redshift支持REGEXP_SUBSTR函数,专门用来提取符合正则规则的子串。针对你的[1245,2324,4433]格式,直接用下面的SQL就能拿到第一个数字:
-- 替换成你的表名和列名 SELECT REGEXP_SUBSTR(your_column, '\\[(\\d+)', 1, 1, 'e') AS first_number FROM your_table;
我给你拆解一下每个部分的意思,完全不用记正则规则也能明白:
your_column:替换成你存储这个列表字符串的实际列名'\\[(\\d+)':这个正则的作用是匹配左方括号[后面的一串数字,\\[是转义左括号(SQL里反斜杠要写两个才能生效),(\\d+)表示"一个或多个数字",并且把这部分标记为我们要提取的内容1,1,'e':前两个1分别表示"从字符串第1个字符开始找"和"取第一个匹配的结果",'e'是告诉函数只返回我们标记的数字部分,而不是包含左括号的整个匹配串
你可以先拿固定字符串测试一下,确保没问题:
SELECT REGEXP_SUBSTR('[1245,2324,4433]', '\\[(\\d+)', 1, 1, 'e') AS first_number;
执行后会直接返回1245。
方法二:用字符串位置函数(更直观,适合简单场景)
如果你实在不想碰正则,也可以用SUBSTRING+POSITION的组合来实现,前提是你的列表里至少有两个元素(也就是一定有逗号):
SELECT SUBSTRING(your_column, POSITION('[' IN your_column) + 1, POSITION(',' IN your_column) - POSITION('[' IN your_column) - 1) AS first_number FROM your_table;
这个逻辑很直白:
- 先用
POSITION('[' IN your_column)找到左括号的位置,加1就是第一个数字的起始位置 - 再用
POSITION(',' IN your_column)找到第一个逗号的位置,用逗号位置减去左括号位置再减1,就是第一个数字的长度 - 最后用
SUBSTRING提取出这段内容
不过要注意,如果你的列表可能只有一个元素(比如[1245]),这个方法会出错,所以更推荐用第一种正则的方法,适配所有情况。
内容的提问来源于stack exchange,提问作者monika_w091
相关产品推荐
相关产品推荐

