現在、.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
クロギアイコ クロキマユ
クロギトミオ クロギアイコ
クロキマユ クロギトミオ
以上、よろしくお願い致します。
追記
■DBの照合順序
■Order by にJapanese_bin2を指定しない結果
■Order by にJapanese_bin2を指定した結果
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
下記のような質問は推奨されていません。
- 質問になっていない投稿
- スパムや攻撃的な表現を用いた投稿
適切な質問に修正を依頼しましょう。
回答2件
3
ベストアンサー
まず、濁音の扱いですが、以下の記事を見てください。
日本語照合順序での 濁音、半濁音 の取り扱いについて
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総合スコア17614
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
回答へのコメント
1
エクセルでの五十音順(あいうえお順)の並べ替えについて の記事から類推するとマイクロソフト社製のアプリにおいて、半角文字の濁音がExcelでもエスケーブシーケンス文字のように特別に扱われるようです。
SQL serverでも同様だとしたら、ソート用に
translate(NAME2,'゙','ン ')
のように濁点を半角の'ン 'に置き換えた関数値なり新フィールドを使って並び替えるとできるのではないでしょうか。
投稿2017/09/02 21:29
編集2017/09/02 21:31総合スコア2285
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
関連した質問
Q&A
解決済
ボタンのcssが一部にしか効かない
回答2
クリップ0
更新
2020/03/04
Q&A
解決済
ASP.NETのチェックボックスの実装方法
回答1
クリップ0
更新
2020/09/02
Q&A
解決済
safariで表示した際のレイアウトがどうしても崩れてしまう
回答1
クリップ0
更新
2023/03/23
Q&A
解決済
WPFで大量の箇条書きを作成する。
回答2
クリップ1
更新
2023/03/13
Q&A
解決済
POSTリクエストする際、日付が原因?でエラーになる
回答1
クリップ0
更新
2023/03/16
Q&A
受付中
【GAS】フォルダ内の全ファイルに対し処理を行う際の処理順
回答1
クリップ1
更新
2023/03/26
意見交換
受付中
サンプルコードに指定するTarget FrameWorkについて
回答5
クリップ0
更新
2023/03/12
Q&A
解決済
1986-1-12 00:00:00.0 と出力されてしまうのを, SimpleDateFormat("yyyy-MM-dd");のパターンに直したい
回答2
クリップ0
更新
2023/03/24
同じタグがついた質問を見る
C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。
SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。
Oracle DatabaseはRDBMSの商品です。具体的な発売商品として知られているのが、 Oracle9i、Oracle10g、Oracle 11gとOracle 12cです。
COBOL(COmmon Business Oriented Langage)は、実務処理用に開発されたプログラミング言語です。