Mr.*_* TA 3 sql t-sql sql-server string sql-server-2008-r2
这个查询:
SELECT CASE WHEN 'abc ' = 'abc' THEN 1 ELSE 0 END
Run Code Online (Sandbox Code Playgroud)
返回 1,即使 'abc' 显然不等于 'abc'。相似地,
SELECT CASE WHEN 'abc ' LIKE '%c' THEN 1 ELSE 0 END
Run Code Online (Sandbox Code Playgroud)
也返回 1。但是,一个非常相似的查询:
SELECT * FROM #tempTable WHERE Name LIKE '%c'
Run Code Online (Sandbox Code Playgroud)
没有返回 Name = 'abc' 的行。
SQL Server 2008 R2、Windows 7 和 2008 R2、x64。
= 忽略尾随空格
len 忽略训练空间
就像不忽略尾随空格
SELECT CASE WHEN 'abc ' = 'abc' and DATALENGTH('abc ') = DATALENGTH('abc')
THEN 1 ELSE 0 END
Run Code Online (Sandbox Code Playgroud)
您可以断言 DATALENGTH 不相关,但它仍然是解决方案。
事实证明,Name 列NVARCHAR(即使它只包含 ASCII 字符)并且NVARCHAR行为与以下不同VARCHAR:
SELECT CASE WHEN N'abc ' LIKE 'abc' THEN 1 ELSE 0 END
Run Code Online (Sandbox Code Playgroud)
返回 0,与列而不是文字相同。以下代码仍然返回 1:
SELECT CASE WHEN N'abc ' = 'abc' THEN 1 ELSE 0 END
Run Code Online (Sandbox Code Playgroud)
因此=,LIKE工作方式不同,这是另一个特殊的区别。
附言。对于后代,这里有一些例子:
SELECT CASE WHEN N'abc ' LIKE 'abc' THEN 1 ELSE 0 END
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5903 次 |
| 最近记录: |