Jes*_*aja 1 sql-server sql-server-2012
我尝试了以下查询(测试数据)并找到了SPACES trimmed automatically.
DECLARE @Employees TABLE(EmpID INT IDENTITY(1,1), FirstName VARCHAR(10), LastName VARCHAR(10))
INSERT INTO @Employees VALUES
('Mani',' '),
('Muthu','Kumar'),
('Ram','Prasath'),
('Elango',''),
('Prabhu',' ')
DECLARE @Name VARCHAR(10) = ' ' -- 2 Spaces
-- SELECT LEN(@Name) -- 0
-- Returned rows with empty LastName
SELECT * FROM @Employees WHERE LastName = @Name
-- Update - Multiple spaces
UPDATE @Employees SET LastName = NULLIF(LastName, ' ') -- All empty last name updated
SELECT * FROM @Employees
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我搜索了行LastName with 2 spaces.但是它返回了所有具有空LastName的行.我检查了给定参数值的长度.它表明0 (actually 6 spaces).
我试图更新包含多个空格的LastName(例如,尝试了2个空格),但它 updated all the records with empty LastName
如何自动修剪?
我正在使用SQL Server 2012.
1)LEN记录为:
返回指定字符串表达式的字符数,不包括尾随空格.
(我的重点)
ANSI标准要求对比较中使用的字符串进行填充,以便在比较它们之前使它们的长度匹配.填充直接影响WHERE和HAVING子句谓词以及其他Transact-SQL字符串比较的语义.例如,Transact-SQL认为字符串'abc'和'abc'在大多数比较操作中都是等效的.
...
(事实上,从技术上讲,所发生的事情不是修剪而是填充.如果你能真正找到一种方法来证明这种差异,那就是奖励积分)
使用这些功能的两种方法 - 一种,您可以使用DATALENGTH.另一个是你可以附加一个尾随的非空格字符,用作哨兵.
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |