在 SQL 中将文本放在第二个特殊字符之前

Bring text before the second special character in SQL

提问人:user22338597 提问时间:8/4/2023 最后编辑:jarlhuser22338597 更新时间:8/4/2023 访问量:45

问:

我有一个专栏,看起来像这样:

ss pullover jaq:rwbwht:40 
ribbed cttn 5608:navy:10.5 
shorts:black:xl
s:pigment wash mushroom:l  
t tote bag:mushroom:1size

我需要在第二个之前提取字符串,以便它看起来像这样::

ss pullover jaq:rwbwht
ribbed cttn 5608:navy   
shorts:black  
s:pigment wash mushroom  
t tote bag:mushroom

我该怎么做?

我尝试了 和 函数,但它们只将文本带到第一个,直到第二个.RIGHTsubstring::

sql snowflake-cloud-data-platform 子字符串 特殊字符 修剪

评论

1赞 NickW 8/4/2023
请使用您正在使用的 DBMS(Oracle、SQL Server、MySQL 等)标记您的问题
0赞 jarlh 8/4/2023
它总是 2 个冒号字符吗?(从来没有 1 或 3?
0赞 user22338597 8/4/2023
@jarlh 是的,总是有 2 个冒号字符

答:

0赞 Koushik Roy 8/4/2023 #1

一种方法是用于基于字符串拆分字符串,然后再次连接它们。 或者第二种方法是使用带有 regexp_instr() 的子字符串,如下所示 -split_part():

select split_part('ss pullover jaq:rwbwht:40',':',1) ||':' || split_part('ss pullover jaq:rwbwht:40',':',2) option1,  
substring('ss pullover jaq:rwbwht:40',1,regexp_instr('ss pullover jaq:rwbwht:40',':',1,2)-1)  option2
0赞 Alexander Klimenko 8/4/2023 #2

使用正则表达式的另一个选项:

SELECT REGEXP_SUBSTR(<YOUR_COLUMN>, '^[^:]*:[^:]*') FROM <YOUR_TABLE>;