Sql 是否从给定字符串中删除特定子字符串?
我用分号分隔字符串。有些子字符串包含特定字符,如pipeSql 是否从给定字符串中删除特定子字符串?,sql,sql-server,Sql,Sql Server,我用分号分隔字符串。有些子字符串包含特定字符,如pipe| 如何使用SQL Server删除这些子字符串 例如: 1,abc;1,abc|1,def;1,abc|2,def;1,abc|3,def;1,abc|4,def;1,abc|5,def;1,abc|6,def;2,abc;2,abc|7,def;2,abc|7,def|1,xyz;2,abc|8,def 结果应为-1,abc;2、abc创建一个函数来拆分字符串。比如在: SELECT REPLACE('1,abc;1,abc|1,de
|
如何使用SQL Server删除这些子字符串
例如:
1,abc;1,abc|1,def;1,abc|2,def;1,abc|3,def;1,abc|4,def;1,abc|5,def;1,abc|6,def;2,abc;2,abc|7,def;2,abc|7,def|1,xyz;2,abc|8,def
结果应为-
1,abc;2、abc代码>创建一个函数来拆分字符串。比如在:
SELECT REPLACE('1,abc;1,abc|1,def;1,abc|2,def;1,abc|3,def;1,abc|4,def;1,abc|5,def;1,abc|6,def;2,abc;2,abc|7,def;2,abc|7,def|1,xyz;2,abc|8,def','|','')
然后,您必须从包含管道“|”的返回表中删除值,或者从不包含任何管道“|”的返回表中选择值。如果不是sql server,我将使用正则表达式来解决此问题
此正则表达式显示要保留的子字符串:^[^ |]+|;[^|]+;|;[^ |]+$
或使用此正则表达式来剪切要删除的子字符串:;正如我所提到的,Hi-Raj需要移除具有管道“|”的孔子管柱。如果管柱类似于1,则abc;1,abc | 1,def;1,abc | 2,def;1,abc | 3,def;那么结果应该是-1,2,。。。或1,abc;2,def…您的问题、示例和预期结果并不完全匹配。我宁愿期待结果'1,abc;2、abc;…'对于给定的示例,这是正确的。。在这种情况下,解决方案是什么。
CREATE FUNCTION [dbo].[SDF_SplitString]
(
@sString nvarchar(2048),
@cDelimiter nchar(1)
)
RETURNS @tParts TABLE ( part nvarchar(2048) )
AS
BEGIN
if @sString is null return
declare @iStart int,
@iPos int
if substring( @sString, 1, 1 ) = @cDelimiter
begin
set @iStart = 2
insert into @tParts
values( null )
end
else
set @iStart = 1
while 1=1
begin
set @iPos = charindex( @cDelimiter, @sString, @iStart )
if @iPos = 0
set @iPos = len( @sString )+1
if @iPos - @iStart > 0
insert into @tParts
values ( substring( @sString, @iStart, @iPos-@iStart ))
else
insert into @tParts
values( null )
set @iStart = @iPos+1
if @iStart > len( @sString )
break
end
RETURN
END