繁体   English   中英

使用 SQL 从字符串中提取 Substring

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM