2017-09-21 164 views
1

我有一個代碼爲什麼SQL忽略字符串末尾的額外空格?

DECLARE @A VARCHAR(10) = 'A' 
DECLARE @B VARCHAR(10) = 'A ' 

IF(@[email protected]) 
    SELECT 'Equal' 
ELSE 
    SELECT 'Not Equal' 

這裏@A和@B是不相等的。

要沒底無視多餘的空格,我已經試過

IF(REPLACE(@B,' ','.') = REPLACE(@A,' ','.')) 

我的問題是:

  1. 爲什麼SQL把他們當作平等的嗎?
  2. 是否有其他方法可以做到這一點?
+0

str_replace函數(」」, '',@ B)是什麼ü試圖做什麼? –

+0

來自dupe答覆我貼:https://support.microsoft.com/en-gb/help/316626/inf-how-sql-server-compares-strings-with-trailing-spaces – Tanner

+0

其他潛伏在翅膀。從['Len()']的文檔(https://docs.microsoft.com/en-us/sql/t-sql/functions/len-transact-sql):「返回指定的字符數字符串表達式**,不包括尾隨空白**。「 – HABO

回答

3

@A和@B 等於。它們只是不一樣:)在執行字符串比較時,SQL Server會認爲具有尾部空格的字符串的所有變體均相等。此外,活動歸類可以將附加字符串組合到該等價類中。

如果要以區分尾隨空格的方式比較兩個字符串,請使用類似的運算符。例如

select 1 
where 'a' like 'a ' 

INF: How SQL Server Compares Strings with Trailing Spaces

相關問題