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()函数,可以根据需要截取字符串,但并不能实现分割
自己写分割函数,以下可以参考:
(
@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如何根据隔符分割字符串?的主要内容,如果未能解决你的问题,请参考以下文章