我有一个如下所示的 SQL 代码:
declare @str nvarchar(max),@i int
set @i=0
set @str='abc '
declare @tbl Table(a nvarchar(max))
insert @tbl select @str
while (select a from @tbl)<>''
begin
set @i=@i+1
set @str = substring(@str,2,len(@str))
update @tbl set a=@str
select * from @tbl
end
Run Code Online (Sandbox Code Playgroud)
这里@str有值'abc '(末尾有空格)。执行上述查询时,当'a'. 此查询的输出还包括:
bc
c
<here blank>
Run Code Online (Sandbox Code Playgroud)
对于上面的查询,如果我给出输入@str,'abcd'
那么输出将是
bcd
cd
d
<here blank>
Run Code Online (Sandbox Code Playgroud)
所以在第一种情况下,@str='abc '我想得到像
bc
c
<here blank>
<here blank>
Run Code Online (Sandbox Code Playgroud)
现在代码正在检查空间,因此我遇到了问题。但我希望它也考虑到最后的空间。
同样是 SQL 中的问题len()。双方len('a')并len('a ')会返回1.所以,如果请人帮助我查询,以便它会给我想要的输出。
在检查字符串是否为空时,向其附加一个非空格字符并将结果与相同的字符进行比较。这个
@string + '.' <> '.'
Run Code Online (Sandbox Code Playgroud)
仅当@string真的为空时才会评估为 TRUE 。该@string的尾随空格将计(因为他们将不再追加后尾.)。
你可以类似地找到长度。这个
LEN(@string + '.')
Run Code Online (Sandbox Code Playgroud)
只会在@stringis''时评估为 1 ,而不是当它是' '或' '或任何类型的时候。
顺便说一句,当您希望SUBSTRING函数返回从某个位置到字符串末尾的子字符串时,您可以指定任何相当大的数字作为长度参数,无需使用LEN(). 很多时候像
SUBSTRING(@string, 2, 999999999)
Run Code Online (Sandbox Code Playgroud)
会做。
| 归档时间: |
|
| 查看次数: |
10090 次 |
| 最近记录: |