現在、.NET COBOL/ORACLEからC#/SQLServerへの移植作業をしています。
SQLServerから取得する際にOrderByで下記のNAMEを昇順で取得したところ
下記のような順序で取得されました。
C#では濁点付きが先に並んでしまうのですが
.NET COBOLと同じような並びにするにはどうすればいいのでしょうか?
ORACLE:JA16SJISTILDE
SQLServer:Japanese_CI_AS
※Japanese_CI_AIも試しましたが同じでした。
■.NET COBOLでは単純にSQL取得時にNAMEをOrderByしているだけでした。
■SQLServerの照合順序もググって得た情報で数パターン試しましたが変わらず。
■C#でLinqを使用しても同様でした。
■LinqのOrderBy時にStrings.Strconvによる全角変換しても同様でした。
<C#> <NET COBOL>
NAME NAME
クロギアイコ クロキマユ
クロギトミオ クロギアイコ
クロキマユ クロギトミオ
以上、よろしくお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/03 04:58
回答2件
0
ベストアンサー
まず、濁音の扱いですが、以下の記事を見てください。
日本語照合順序での 濁音、半濁音 の取り扱いについて
https://blogs.msdn.microsoft.com/jpsql/2014/12/11/2353/
質問者さんのケースでは半角カタカナですが、上の記事 "SQL Server で 日本語照合順序を使用している場合、半角文字の後に濁音、半濁音を追加すると、”半角文字” + “濁音、半濁音” が 1 文字として認識されます" というところに注目してください。
なので、質問者さんのケースの "ギ" は、'キ' と '゙' という 2 つの文字として Order が決まるのではなく、濁音 1 文字として認識されるそうです。
そして、濁音がどのように扱われるかというと、以下の記事にありますように、濁点はアクセントとして扱われる(Order By では 'キ' と同じに扱われる)そうです。
SQL Server 2005 にて、照合順序設定:Japanese_CI_AS時での、濁点を含んだ時のOrder Byの仕様を教えて下さい。
https://social.msdn.microsoft.com/Forums/sqlserver/ja-JP/729f1bef-ae99-4f98-977d-94f5986e9d8c/sql-server-2005-japaneseciasorder-by?forum=sqlserverja
つまり、Order By では濁点はないのと同じです。濁点がなければ期待した通りの結果ですよね?
クロギアイコ ⇒ クロキアイコ
クロギトミオ ⇒ クロキトミオ
クロキマユ ⇒ クロキマユ
.NET COBOLと同じような並びにするにはどうすればいいのでしょうか?
上に紹介した後者の記事に書いてあるように、照合順序を Japanese_BIN2 とすれば、少なくとも質問者さんの例に限れば「.NET COBOLと同じ」になります。
全てのケースで完全に同じになるかどうかは分かりませんが。
Japanese_BIN2 とは何かについては以下の記事を見てください。
照合順序 – 文字の比較と並び順 (その 1)
https://blogs.msdn.microsoft.com/jpsql/2016/07/26/1-3/
【画像追加】
Japanese_CI_AS
http://surferonwww.info/blogengine/image.axd?picture=2017%2f9%2fJapanese_CI_AS.jpg
Japanese_BIN2
http://surferonwww.info/blogengine/image.axd?picture=2017%2f9%2fJapanese_BIN2.jpg
投稿2017/09/03 06:01
編集2017/09/04 04:17退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/04 03:39
退会済みユーザー
2017/09/04 04:23
2017/09/04 04:59
退会済みユーザー
2017/09/04 06:29
2017/09/04 06:50
2017/09/04 06:55
退会済みユーザー
2017/09/04 07:52 編集
2017/09/05 01:53
退会済みユーザー
2017/09/05 03:30 編集
退会済みユーザー
2017/09/05 04:49
2017/09/05 04:56
2017/09/05 06:11
0
エクセルでの五十音順(あいうえお順)の並べ替えについて の記事から類推するとマイクロソフト社製のアプリにおいて、半角文字の濁音がExcelでもエスケーブシーケンス文字のように特別に扱われるようです。
SQL serverでも同様だとしたら、ソート用に
translate(NAME2,'゙','ン ')
のように濁点を半角の'ン 'に置き換えた関数値なり新フィールドを使って並び替えるとできるのではないでしょうか。
投稿2017/09/02 21:29
編集2017/09/02 21:31総合スコア2287
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。