SQL Server ->> 字符串對比


今天同事問我關於SQL Server在字符串尾隨着空格時進行字符串對比的做法。關於這個問題正好在這里講一下,就是SQL Server是按照ANSI/ISO SQL-92中的定義做字符串對比的。

KB316626中已經做了闡述,就是SQL Server對待這種有尾隨空格的字符是會做自動截斷尾隨空格再對比的。

這里做個實驗吧

SELECT * FROM (
SELECT 'A' A UNION ALL
SELECT 'A ' UNION ALL
SELECT 'A  ' UNION ALL
SELECT 'A                           ') A
WHERE A = 'A'

SELECT A, COUNT(*) FROM (
SELECT 'A' A UNION ALL
SELECT 'A ' UNION ALL
SELECT 'A  ' UNION ALL
SELECT 'A                           ') A
GROUP BY A

SELECT A FROM (
SELECT 'A' A UNION ALL
SELECT 'A ' UNION ALL
SELECT 'A  ' UNION ALL
SELECT 'A                           ') A
WHERE A like 'A %'

上面這段代碼會返回下面的結果

 

可以看到SQL Server在做字符串對比和排序(其實排序也需要做字符串對比)是會截斷尾隨空格的,而在做LIKE匹配的時候則例外。

 

那如果是空格開頭呢?這個肯定是沒有截斷起始空格的。再做一個實驗。

SELECT * FROM (
SELECT ' A' A UNION ALL
SELECT 'A ' UNION ALL
SELECT '  A  ') A
WHERE A = 'A'


SELECT A, COUNT(*) FROM (
SELECT ' A' A UNION ALL
SELECT 'A ' UNION ALL
SELECT '  A  ' UNION ALL
SELECT '   A                           ') A
GROUP BY A

上面這段代碼會返回下面的結果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM