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

时间:2016-02-05 06:48:11

标签: sql 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 等特定字符。

如何使用SQL Server删除这些子字符串?

示例:

1,abc;2,abc;....

结果应为 - <ul> <li><a href="#" class="has-items selected" data-filter="*">All</a></li> <?php //Define the loop based on arguments $loop = new WP_Query( $args ); //Display the contents while ( $loop->have_posts() ) : $loop->the_post(); ?> <li><a href="#" data-filter=".<?php $posttags = get_the_tags(); if ($posttags) { foreach($posttags as $tag) { echo $tag->slug; } } ?>"><?php $posttags = get_the_tags(); if ($posttags) { foreach($posttags as $tag) { echo $tag->slug; } } ?></a></li> <?php endwhile;?>

3 个答案:

答案 0 :(得分:0)

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','|','')

答案 1 :(得分:0)

创建一个分割字符串的函数。就像this post中的那个:

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

然后,您必须从返回的表中删除包含管道的值&#39; |&#39;或者您只需从返回的表格中选择不包含任何管道的值&#39; |&#39;。

答案 2 :(得分:0)

如果不是sql-server,我会使用正则表达式来解决这个问题。

此正则表达式显示要保留的那些子句:^[^|]+;|;[^|]+;|;[^|]+$
或使用此正则表达式来删除要删除的子字符串:;[^;]+\|[^;]+