1

我的数据库数据在数据中具有 unicode 和 html 实体格式的特殊字符。我需要按字母顺序对结果列表进行排序,但是,一些 unicode 数据和 html 实体会弄乱字母顺序(即: 出现在 A 之前,而代码可能是 A 之后的重音 E)。

目前,我只是使用嵌套的替换语句来生成一个“排序”列,因为我的印象是数据库中使用了一组有限的特殊字符。

客户希望安全起见,在排序之前将此页面http://webdesign.about.com/library/bl_htmlcodes.htm上的所有字符转换为英文等价物......

当前代码:

Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(
Replace(@Word, 'À', 'A') 
             , 'Â', 'A')
             , 'Ä', 'A')
             , 'Ç', 'C')
             , 'É', 'E')
             , 'È', 'E')
             , 'È', 'E')
             , 'Ê', 'E')
             , 'Î', 'I')
             , 'ï', 'i')
             , 'Ø', 'O')
             , 'Ő', 'o')
             , 'Á', 'A')
             , 'Ñ', 'N')
             , 'í', 'I')
             , 'Ó', 'O')
             , 'Ń', 'N')
             , 'Č', 'C')
             , 'á', 'A')
             , 'ő', 'O')
             , 'ő', 'o')
             , 'ö', 'o')

我意识到这段代码效率非常低 - 它开始时只有几个字符,然后随着时间的推移被添加。

在上面链接的页面上循环浏览所有组合的最佳方式是什么?

更好的是,有人可以确认 unicode 值是否按字母顺序正确排序,如果是,是否有预构建的 SQL Server 2005 函数仅将 HTML 实体(友好、数字和十六进制版本)转换为该列的 Unicode?

谢谢,

托马斯

4

1 回答 1

0

您可以使用CONVERTandCOLLATE来获得带有重音符号的结果:

SELECT
 CONVERT(varchar(50), N'æøåáäĺćçčéđńőöřůýţž')
 COLLATE Cyrillic_General_CI_AI

returns aoaaalcccednooruytz

就 HTML 代码而言,我会考虑拆分为 CLR 存储过程(或“适当的”编程语言中的东西),以便您可以使用 .NET 库或类似的库。更好的是,我会在插入数据的程序中计算排序键,并完全避免在 sql-server 中进行这种字符串处理。

于 2012-08-14T20:36:12.857 回答