图片 3

关于SSMS显示select出来的数据行的疑问

Posted by

 

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

调试存储过程时,往往可以用print将存储过程中的变量print出来,

一,用临时表作为数组

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

复制代码 代码如下:

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

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

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

您可能感兴趣的文章:

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

但是今天发现不好使了,

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

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

图片 1

 

但是我从查询结果select
@str的结果中,将这个字符串复制出来之后,字符串的长度就被截断了,我从上面select出来的结果中复制

新贴到一个查询窗口中,发现结尾不是上面定义时候的bbbbb,如截图,通过select
len这个字段,发现是长度是43677

图片 2

图片 3

 

因为今天遇到了类似的问题,调试存储过程的时候,对于存储过程中处理的字符串,因为print会被截断,那么就select出来,

然后复制select出来的结果到一个新窗口中,发现字符串结尾跟处理字符串的逻辑对不上,

相关文章

Leave a Reply

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