【发布时间】:2019-08-07 09:00:02
【问题描述】:
我刚刚偶然发现了这个:
为什么下面的代码没有:
DECLARE @s nvarchar(10) = N' '
PRINT CONCAT('#', @s, '#')
PRINT CONCAT('#', LEN(@s), '#')
导致输出
##
#0#
或
# #
#1#
然而,在 SQL Server 2017 上,此代码会产生输出
# #
#0#
这对我来说似乎是矛盾的。
字符串的长度为 0 且为 '' 或长度为 1 且为 ' '。
如果添加以下代码,整个事情就会变得更加陌生:
DECLARE @s nvarchar(10) = N' '
PRINT CONCAT('#', @s, '#')
PRINT CONCAT('#', LEN(@s), '#')
DECLARE @l1 int = LEN(CONCAT('#', @s, '#'))
PRINT LEN(@s)
PRINT LEN('#')
PRINT @l1
输出如下:
# #
#0#
0
1
3
所以我们有三个子字符串,一个长度为 0,两个长度为 1。那么总字符串的长度是 3?我很困惑。
如果你用几个空格填充@s,它看起来更有趣 - 例如。 5 个空格会导致此输出:
# #
#0#
0
1
7
所以这里是 1×0 + 2×1 甚至 7。我希望我的银行可以这样计算我的账户余额。
谁能给我解释一下这是怎么回事?
非常感谢您的帮助!
【问题讨论】:
-
您将在此处获得相关详细信息 - stackoverflow.com/questions/2025585/…
标签: sql-server tsql sql-server-2017 nvarchar