Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 是否从给定字符串中删除特定子字符串?_Sql_Sql Server - Fatal编程技术网

Sql 是否从给定字符串中删除特定子字符串?

Sql 是否从给定字符串中删除特定子字符串?,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

我用分号分隔字符串。有些子字符串包含特定字符,如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,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