有关SSMS显示select出来的数据行的难题,MySQL里福寿绵绵相通SPLIT的分割字符串的函数

 

下边的函数,实现了象数组一样去处理字符串。

我随意定义一个超级长的字符串,可以看出来len是87049,同时用select @str
给他select 出来

create function f_split(@c varchar(2000),@split varchar(2))
returns @t table(col varchar(20))
as
begin
while(charindex(@split,@c)<>0)
begin
insert @t(col) values (substring(@c,1,charindex(@split,@c)-1))
set @c = stuff(@c,1,charindex(@split,@c),”)
end
insert @t(col) values (@c)
return
end
go
select * from dbo.f_split(‘dfkd,dfdkdf,dfdkf,dffjk’,’,’)
drop function f_split

但是今天发现不好使了,

col

dfkd
dfdkdf
dfdkf
dffjk
(所影响的行数为 4 行)

二、按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果。

复制代码 代码如下:

CREATE function Get_StrArrayLength
(
@str varchar(1024), –要分割的字符串
@split varchar(10) –分隔符号
)
returns int
as
begin
declare @location int
declare @start int
declare @length int
set @str=ltrim(rtrim(@str))
set @location=charindex(@split,@str)
set @length=1
while @location<>0
begin
set @start=@location+1
set @location=charindex(@split,@str,@start)
set @length=@length+1
end
return @length
end

调用示例:select dbo.Get_StrArrayLength(‘78,1,2,3′,’,’)
返回值:4

三、按指定符号分割字符串,返回分割后指定索引的第几个元素,象数组一样方便

复制代码 代码如下:

CREATE function Get_StrArrayStrOfIndex
(
@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
–这儿存在两种情况:1、字符串不存在分隔符号
2、字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号。
return substring(@str,@start,@location-@start)
end

调用示例:select dbo.Get_StrArrayStrOfIndex(‘8,9,4′,’,’,2)
返回值:9

四、结合上边两个函数,象数组一样遍历字符串中的元素

复制代码 代码如下:

declare @str varchar(50)
set @str=’1,2,3,4,5′
declare @next int
set @next=1
while @next<=dbo.Get_StrArrayLength(@str,’,’)
begin
print dbo.Get_StrArrayStrOfIndex(@str,’,’,@next)
set @next=@next+1
end

调用结果:
1
2
3
4
5

注意字符串是”aaaaa…………bbbbb”,结尾时bbbbb

您可能感兴趣的文章:

  • Mysql字符串截取函数SUBSTRING的用法说明
  • MySQL
    replace函数替换字符串语句的用法
  • mysql获取字符串长度函数(CHAR_LENGTH)
  • 使用MySQL中的AVG函数求平均值的教程
  • 详解Mysql中的JSON系列操作函数
  • Mysql中LAST_INSERT_ID()的函数使用详解
  • mysql函数拼接查询concat函数的使用方法
  • Mysql数据库使用concat函数执行SQL注入查询
  • MySQL笔记之函数查询的使用
  • mysql
    查询数据库中的存储过程与函数的语句
  • MySQL使用集合函数进行查询操作实例详解

如果超过4000个字符,超长的字符会被自动截断,这一点应该比较清楚。

复制代码 代码如下:

后面就干脆试一下,对于结果取len是没有问题的,长字符串select出来,然后再复制粘贴出来,中间就被截断了。

一,用临时表作为数组

 

 

比如我对字符串的处理是以分号结尾,实际上select出来然后粘贴出来查看,根本不是以分号结尾,

20160920补充:

 

对于超过4000的字符串没办法print出来的时候,往往可以选择select
@v_str这种方式,将后台的字符串select出来,然后粘贴出来查看

图片 1

 

 

但是print出来的字符串有一定长度限制,刚才专门试了一下,应该是4000个字符

而处理字符串的逻辑又很简单,断定可以不会有bug,

验证起来很简单,比如:设置为20个字符串,select
‘一个长于20个字符的字符串’,然后复制其结果,从grid中最多可以复制20个字符

发表评论

电子邮件地址不会被公开。 必填项已用*标注