1

データに Unicode と html の両方のエンティティ形式の特殊文字を含むデータベース データがあります。結果のリストをアルファベット順に並べ替える必要がありますが、一部の Unicode データと html エンティティはアルファベット順を台無しにします (つまり、コードが A の後に来るアクセント付きの E の場合、 が A の前に来ます)。

現在、DBで使用される特殊文字のセットが限られているという印象を受けていたため、ネストされたreplaceステートメントを使用して「ソート」列を生成しています。

クライアントは、安全を期して、このページ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 値がアルファベット順に正しくソートされているかどうかを誰かが確認できますか? もしそうなら、この列の HTML エンティティ (フレンドリ、数値、および 16 進バージョン) を Unicode に変換するための組み込み済みの SQL Server 2005 関数はありますか?

ありがとう、

トーマス

4

1 に答える 1

0

を使用CONVERTCOLLATEて、アクセントを使用して必要な結果を得ることができます。

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

returns aoaaalcccednooruytz

HTMLコードに関する限り、.NETライブラリなどを使用できるように、CLRストアドプロシージャ(または「適切な」プログラミング言語の何か)に分割することを検討します。さらに良いことに、データを挿入するプログラムで並べ替えキーを計算し、sql-server内からこの種の文字列処理を実行しないようにします。

于 2012-08-14T20:36:12.857 に答える