Gra*_*mvs 8 sql sql-server string if-statement
这可能是一个愚蠢的问题,但任何人都可以解释为什么SQL收益'False'为
IF 'test' = ' test' -- notice leading space
SELECT 'True'
ELSE
SELECT 'False'
Run Code Online (Sandbox Code Playgroud)
但回报'True'为
IF 'test' = 'test ' -- notice trailing space
SELECT 'True'
ELSE
SELECT 'False'
Run Code Online (Sandbox Code Playgroud)
编辑:
我正在使用SQL Server 2008 R2
尾随空格被忽略.
如果你想真正测试它们是否相同,那么像这样:
DECLARE @foo nvarchar(50) = 'foo'
DECLARE @foo2 nvarchar(50) = 'foo ' -- trailing space
IF @foo = @foo2 AND DATALENGTH(@foo) = DATALENGTH(@foo2) --LEN ignores trailing spaces
SELECT 'true'
ELSE
SELECT 'false'
Run Code Online (Sandbox Code Playgroud)
为什么你的例子是真的:
http://www.timvw.be/2013/04/27/the-curious-case-of-trailing-spaces-in-sql/
根据http://www.andrew.cmu.edu/user/shadow/sql/sql1992.txt:
Run Code Online (Sandbox Code Playgroud)3) The comparison of two character strings is determined as fol- lows: a) If the length in characters of X is not equal to the length in characters of Y, then the shorter string is effectively replaced, for the purposes of comparison, with a copy of itself that has been extended to the length of the longer string by concatenation on the right of one or more pad char- acters, where the pad character is chosen based on CS. If CS has the NO PAD attribute, then the pad character is an implementation-dependent character different from any char- acter in the character set of X and Y that collates less than any string under CS. Otherwise, the pad character is a . b) The result of the comparison of X and Y is given by the col- lating sequence CS. c) Depending on the collating sequence, two strings may com- pare as equal even if they are of different lengths or con- tain different sequences of characters. When the operations MAX, MIN, DISTINCT, references to a grouping column, and the UNION, EXCEPT, and INTERSECT operators refer to character strings, the specific value selected by these operations from a set of such equal values is implementation-dependent.