我用分号分隔字符串。有些子字符串包含管道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;?>
答案 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,我会使用正则表达式来解决这个问题。
此正则表达式显示要保留的那些子句:^[^|]+;|;[^|]+;|;[^|]+$
或使用此正则表达式来删除要删除的子字符串:;[^;]+\|[^;]+