[英]Extract Substring from a string using SQL
身体 |
---|
Beta M yy-Tz |
Beta M zz-Ox |
Beta W yy-Tz |
老虎 W 冲刺 |
老虎中号冲刺 |
虎白石W珍珠 |
虎白石M珍珠 |
我在雪花表 xyz 中有一列“正文”,其中包含正在订购的产品。 “正文”字段由三部分组成。
第一部分:产品名称(例如:Beta、Tiger、Tiger White Stone)
第二部分:性别 M 或 W 和
第三部分是内部产品命名(例如:yy | Tz、zz | Ox、Dash 和 Pearl)。
我想在名为性别的单独列中提取 M 和 W,以了解我有多少男性和女性客户。
预计 output:
性别 |
---|
米 |
米 |
W |
W |
米 |
W |
米 |
我尝试使用拆分 function 但我觉得这不是一种有效的方法。 有没有更好的方法来实现这个?
因为字符串的“部分”可以包含空格,所以使用空格来查找第二部分可能不可靠。 我将假设您正在寻找的模式是“ M ”和“ W ”,但显然如果这些模式可以存在于第一部分或第三部分中,这将不起作用。
尝试这个:
CASE WHEN POSITION(' M ', BODY) > 0 THEN 'M'
WHEN POSITION(' W ', BODY) > 0 THEN 'W'
ELSE 'X' END
另一种选择是使用 Snowflake REGEXP_SUBSTR
函数,其正则表达式匹配第三个定义组之前的单个字符:
SELECT REGEXP_SUBSTR(Body, ' ([A-Z]) [\\w\\-]+$', 1, 1, 'e') AS Gender
FROM tab
正则表达式寻找:
([AZ])
: 空格 + 大写字符(第 1 组)+ 空格[\\w\\-]+
:字母数字字符和破折号的任意组合$
: 字符串结尾三个参数1, 1, 'e'
代表:
1,
: 从第一个字符开始, 1,
: 获取第一次出现'e'
:提取(第一个)组它解决了你的问题吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.