微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在sql列中搜索字符串,并且需要用前缀分割所需的字符串

如何解决在sql列中搜索字符串,并且需要用前缀分割所需的字符串

我有一个表,有两列account和rt_exclude。我只需要从带有前缀的rt_exclude列中选择单词“ exclusion”。rt_exclude列包含许多不同长度的行,所以我不想使用case语句

123,278-C Share Exclusion; 3405-B Share Exclusion; 5784-Reit Exclusion
333,278-C Share Exclusion; 3405-B Share Exclusion; 5784-Reit Exclusion; 6532-Exclude GIREX 39822J102
444,3274-TSSAX Exclusion; 3370-BFAFX Exclusion; 3405-B Share Exclusion; 5784-Reit Exclusion

必填项应与“帐户”列中的内容相同

123,Share Exclusion
123,Reit Exclusion
333,Share Exclusion
333,Reit Exclusion
444,TSSAX Exclusion
444,BFAFX Exclusion
444,Reit Exclusion

解决方法

这看起来像string_split()

select t.col1,s.value
from t cross apply
     string_split(col2,'; ') s
where s.value like '%Exclusion';

请注意,不建议在单个列中存储多个值。您应该重新考虑数据模型。

,

如果您使用的是SQL Server 2016+,请按照建议使用string_split。
要在SQL Server 2014及以下版本中完成此操作,您需要自定义拆分功能,例如SO上herehere的dbo.SplitStrings_CTE。

CREATE FUNCTION dbo.SplitStrings_CTE
(
   @List       NVARCHAR(MAX),@Delimiter  NVARCHAR(255)
)
RETURNS @Items TABLE (Item NVARCHAR(4000))
WITH SCHEMABINDING
AS
BEGIN
   DECLARE @ll INT = LEN(@List) + 1,@ld INT = LEN(@Delimiter);
 
   WITH a AS
   (
       SELECT
           [start] = 1,[end]   = COALESCE(NULLIF(CHARINDEX(@Delimiter,@List,1),0),@ll),[value] = SUBSTRING(@List,1,COALESCE(NULLIF(CHARINDEX(@Delimiter,@ll) - 1)
       UNION ALL
       SELECT
           [start] = CONVERT(INT,[end]) + @ld,[end] + @ld),[end] + @ld,@ll)-[end]-@ld)
       FROM a
       WHERE [end] < @ll
   )
   INSERT @Items SELECT [value]
   FROM a
   WHERE LEN([value]) > 0
   OPTION (MAXRECURSION 0);
 
   RETURN;
END
GO

选择变为

SELECT t.id,SUBSTRING(s.Item,PATINDEX('%[^0-9- ]%',s.Item)+1,LEN(s.Item)) AS col
FROM docs t
CROSS APPLY SplitStrings_CTE(content,';') s
WHERE s.Item LIKE '%Exclusion';
,

这是您想要的吗?

Select res.col1,SUBSTRING(res.col2,CHARINDEX('-',res.col2)+CHARINDEX(' ',res.col2),99)
from 
(
select StringSplit.col1,value col2
from  StringSplit
Cross Apply  STRING_SPLIT(StringSplit.col2,';') as ss
WHERE StringSplit.col2 LIKE '%Exclu%') as res

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。