sql如何根据隔符分割字符串?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql如何根据隔符分割字符串?相关的知识,希望对你有一定的参考价值。

如数据
A.......B
1.....12;323;123
2.....43;23
将其分为
A.......B
1......12
1.......323
1.....123
2.....43
2......23

    数据库自带的substring()、charindex()函数,可以根据需要截取字符串,但并不能实现分割

    自己写分割函数,以下可以参考:

create function GetStr
(
 @str varchar(1024),  --要分割的字符串
 @split varchar(10),  --分隔符号
 @index int --取第几个元素
)
returns varchar(1024)
as
begin
 declare @location int
 declare @start int
 declare @next int
 declare @seed int
 set @str=ltrim(rtrim(@str))
 set @start=1
 set @next=1
 set @seed=len(@split)
 
 set @location=charindex(@split,@str)
 while @location<>0 and @index>@next
 begin
   set @start=@location+@seed
   set @location=charindex(@split,@str,@start)
   set @next=@next+1
 end
 if @location =0 select @location =len(@str)+1  
 return substring(@str,@start,@location-@start)
end

参考技术A 举个例子,相信你可以看懂,举一反三的
/*
字符串分拆函数

--调用示例
select * from dbo.fsplit('a;adf;fd;ed;dh',';')
select * from dbo.fsplit('a,,adf,,fd,,ed,,dh',',,')
邹建 2003.07*/

--检查函数是否存在
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[fsplit]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[fsplit]
GO

--创建字符串分拆的函数
create function fsplit(
@str varchar(8000) --要分拆的字符串
,@spli varchar(10) --字符串分隔符
)
returns @re table(istr varchar(8000))
as
begin
declare @i int,@splen int
select @splen=len(@spli)
,@i=charindex(@spli,@str)
while @i>0
begin
insert into @re values(left(@str,@i-1))
select @str=substring(@str,@i+@splen,8000)
,@i=charindex(@spli,@str)
end
if @str<>'' insert into @re values(@str)
return
end

select * from dbo.fsplit(123|abc|000|777','|')

如何返回分割某个字符串的分隔符? (C#)[重复]

【中文标题】如何返回分割某个字符串的分隔符? (C#)[重复]【英文标题】:How do I return which delimiter split a certain string? (C#) [duplicate] 【发布时间】:2021-06-15 04:19:31 【问题描述】:

我在数学运算符处拆分用户输入string,我想知道是否有某种方法可以准确记住哪个运算符充当了分隔符在代码中?

private void button1_Click(object sender, EventArgs e)

    string userInput = textBox1.Text;
    char[] operators =  '+', '-', '*', '/' ;
    //splits the entered string into substrings after encountering operator characters
    string[] operands = userInput.Split(operators);

【问题讨论】:

【参考方案1】:

我建议 tokenizing 而不是 splitting(在最简单的情况下,您可以使用 Regex.Split 而不是 string.Split):

  using System.Linq;
  using System.Text.RegularExpressions;

  ...

  string userInput = textBox1.Text;
  char[] operators =  '+', '-', '*', '/' ;
  
  string pattern = "(" + string.Join("|", operators
    .Select(c => Regex.Escape(c.ToString()))) + ")";

  string[] tokens = Regex.Split(userInput, pattern);

如果textBox1.Text == "5 * 6 + 7"tokens 将是"5 ", "*", "6", "+", "7"。您现在要做的就是检查每个token操作 还是操作数。像这样的:

  // "5", "6", "7"
  string[] operands = tokens
    .Where(token => !operators.Any(op => op.ToString() == token))
    .Select(item => item.Trim())
    .Where(item => !string.IsNullOrEmpty(item))
    .ToArray();

  // "*", "+"
  string[] operations = tokens
    .Where(token => operators.Any(op => op.ToString() == token))
    .ToArray(); 

【讨论】:

感谢您使用Regex.Escape 非常感谢,会试试这个。

以上是关于sql如何根据隔符分割字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何返回分割某个字符串的分隔符? (C#)[重复]

delphi如何按固定的分隔符来分割字符串,并且把分割出来的字符串放到数组中?具体的代码如何实现?

sql截取第2个和第3个分隔符之间的字符串

SQLSERVER中计算某个字段中用分隔符分割的字符的个数

split使用多个分隔符分割字符串

sqlserver 怎么分割字符串