相关疑难解决方法(0)

LEN函数不包括SQL Server中的尾随空格

我在SQL Server 2005中有以下测试表:

CREATE TABLE [dbo].[TestTable]
(
 [ID] [int] NOT NULL,
 [TestField] [varchar](100) NOT NULL
) 
Run Code Online (Sandbox Code Playgroud)

填充:

INSERT INTO TestTable (ID, TestField) VALUES (1, 'A value');   -- Len = 7
INSERT INTO TestTable (ID, TestField) VALUES (2, 'Another value      '); -- Len = 13 + 6 spaces
Run Code Online (Sandbox Code Playgroud)

当我尝试使用SQL Server LEN()函数找到TestField的长度时,它不计算尾随空格 - 例如:

-- Note: Also results the grid view of TestField do not show trailing spaces (SQL Server 2005).
SELECT 
 ID, 
 TestField, 
 LEN(TestField) As LenOfTestField, -- Does not include trailing …
Run Code Online (Sandbox Code Playgroud)

sql-server

102
推荐指数
7
解决办法
7万
查看次数

SQL WHERE子句将值与尾随空格匹配

在SQL Server 2008中,我有一个名为Zone列的表ZoneReference varchar(50) not null作为主键.

如果我运行以下查询:

select '"' + ZoneReference + '"' as QuotedZoneReference
from Zone
where ZoneReference = 'WF11XU'
Run Code Online (Sandbox Code Playgroud)

我得到以下结果:

"WF11XU "
Run Code Online (Sandbox Code Playgroud)

请注意尾随空格.

这怎么可能?如果该行的尾随空间确实存在,那么我希望返回结果,所以我假设它是SQL Server Management Studio奇怪显示的其他东西.

在C#中,代码调用zoneReference.Trim()将其删除,表明它是某种空白字符.

有人可以帮忙吗?

c# sql database sql-server sql-server-2008

44
推荐指数
2
解决办法
2万
查看次数

LEN() 函数是否在内部应用 TRIM()?

在计算字符串长度之前,SQLLEN()函数是否在内部TRIM()处理数据?

例子:

DECLARE @a VARCHAR(MAX), @b VARCHAR(MAX)
SET @a = '12345 '
SET @b = '12345 7'

SELECT @a, LEN(@a)
-- 12345    5

SELECT @b, LEN(@b)
-- 12345 7  7
Run Code Online (Sandbox Code Playgroud)

双方@a@b有7个字符。@a有 5 个数字字符,末尾有两个空格。

从结果窗口复制两个结果时,我可以看到两个变量的长度均为 7 个字符。但是当试图找到使用LEN()它的变量的长度时会有所不同。将数据存储在带有varchar列的表中时也会发生同样的事情。

sql sql-server

1
推荐指数
1
解决办法
1478
查看次数

标签 统计

sql-server ×3

sql ×2

c# ×1

database ×1

sql-server-2008 ×1