看起來SQL Server在按包含管道字符的字符列進行排序時必須做些特別的事情。sql server如何通過使用管道字符來排序
ASCII( '0')返回由返回48
訂單
ASCII( '| |')一樣的unicode( '')返回124 '|'字母和數字之前的字符。
我試圖看看排序規則,在我看過的'|'性格總是價值124
這裏是我的測試選擇
select * from (
select '0' as col1, ASCII('0') as col2, unicode('0') as col3
union select '1' as col1, ASCII('1') as col2, unicode('1') as col3
union select '|' as col1, ASCII('|') as col2, unicode('|') as col3
union select 'a' as col1, ASCII('a') as col2, unicode('a') as col3
union select ' ' as col1, ASCII(' ') as col2, unicode(' ') as col3
union select '.' as col1, ASCII('.') as col2, unicode('.') as col3
union select '/' as col1, ASCII('/') as col2, unicode('/') as col3
) as q
order by col1
該查詢將返回:
col1 col2 col3
1 32 32
2 . 46 46
3 / 47 47
4 | 124 124
5 0 48 48
6 1 49 49
7 a 97 97
爲什麼47和48之間的124下跌呢?
正在使用的排序規則是SQL_Latin1_General_CP1_CI_AI。
如果只有二進制排序規則使用字符的ascii/unicode值進行排序,那麼如何才能找到排序順序對此排序規則中字符的排序?
這只是使用字符代碼進行排序的二進制排序規則。 '選擇ASCII('A'),ASCII('a')'返回'65,97',但是在大多數排序規則中,這些排序順序相鄰。 –
我的實例正在使用SQL_Latin1_General_CP1_CI_AI,因此您正確的'A'和'a'彼此相鄰。你知道如何找到排序的排序嗎? – GregA100k
並不那麼簡單。 'SELECT CHAR(number)FROM master..spt_values WHERE type ='P'AND number BETWEEN 0 AND 255 ORDER BY CHAR(number)'給出了一些想法。但是,如果您查看'SELECT'Æ'AS X UNION SELECT'AE'UNION SELECT'AF'ORDER BY X'的排序順序,則不是每個字符排序順序。 –