我遇到特殊字符ª和º
的问题我想做这样的事情:
SELECT * FROM tabla WHERE name like '%'ª'%'
- 或相同 -
SELECT * FROM tabla WHERE name like '%'+char(170)+'%'
SELECT * FROM tabla WHERE name like '%'º'%'
- 或相同 -
SELECT * FROM tabla WHERE name like '%'+char(176)+'%'
但结果,在第一种情况下是带有“a”的名称,在第二种情况下是带有“o”的名称
任何想法?
非常感谢!
答案 0 :(得分:1)
以下排序规则将CHAR(170)读为" a":
使用可以使用此代码根据支持的排序规则测试字符:
DECLARE @query VARCHAR(MAX) = '';
DECLARE @charNumber VARCHAR(3) = 170;
DECLARE @testText VARCHAR(255) = 'asd';
SELECT @query = @query
+ CASE WHEN @query > '' THEN 'UNION ALL ' ELSE '' END
+ 'SELECT Name = ''' + name + ''', ConvertsChar = CASE WHEN ''' + @testText + ''' COLLATE ' + name + ' LIKE ''%''+char(' + @charNumber + ')+''%'' COLLATE ' + name + ' THEN 1 ELSE 0 END '
FROM sys.fn_helpcollations()
WHERE name LIKE 'SQL%';
EXEC('SELECT * FROM (' + @query + ') a ORDER BY ConvertsChar DESC, Name;');
正如@Lamak在评论中所建议的那样,您可以将您的名称列整理为Latin1_General_CI_AS或其他排序规则,以避免这种情况。