プロが教える店舗&オフィスのセキュリティ対策術

Postgres 7.4
LANG=ja_JP.UTF-8
----------------------

いつもここではお世話になっております。
現在、日本語の並べ替えで困っています。
並べ替えたいのは「個人情報テーブル」の「ふりがな」列です。
ふりがな列には次のデータが入ります。
・ひらがな(例:あ)
・カタカナ(例:ア)
・小さいひらがな(例:ぁ)
・小さいカタカナ(例:ァ)
・半角カタカナ
(゛と゜のつくものも含みます。)


かか
カカ
ヵヵ
カカ(半角文字)
がが
ガガ
ガガ(半角文字)
ひのこ
ぴのこ
ピノコ
ピノコ(半角文字)

と並べたいものが、
select * from 個人情報テーブル order by ふりがな;
では、

カカ(半角文字)
ガガ(半角文字)
ピノコ (半角文字)
かか
がが
ひのこ
ぴのこ
カカ
ガガ
ピノコ
ヵヵ

になってしまいます。Postgresでは、このように並べることは不可能なのでしょうか?
ちなみに、並べ替え結果として、
あ、ぁ、ア、ァ、ア(半角文字)
の表示順はどうなっても構いません。
ただ
「あ」で




ア(半角文字)
「か」で



カ(半角文字)

ガ(半角文字)
を並べきりたいのです・・・・上の様に
「カカ(半角文字)」のあと
「ピノコ(半角文字)」がでてきて、そのあとに
「かか」がきて・・・またそのあと
「ひのこ」がでて・・・というようにしたくないので・・

「カカ(半角文字)」
「かか」
「ひのこ」
「ピノコ(半角文字)」
というように、同じ発音のものはどんな文字であろうと(かな・カナ・小さい・半角)続けて表示させたいのです・・・(;;)
説明が下手ですみません。。
どなたか解決策がありましたら、よろしくおねがいいたします。

A 回答 (2件)

VBAで作成した清音変換プログラムを載せて起きます。


ExcelなりAccessにご自分で展開して使用してください。

' 清音処理
' prstrKanaSimei : 入力したカナ氏名
' 戻り値 : 清音化したカナ氏名
Public Function fncSeionConv(prstrKanaSimei As String) As String
Dim lstrRet As String
Dim lstrKanaSimei As String
Dim lintLength As Integer
Dim lintIdx As Integer

lstrKanaSimei = prstrKanaSimei
If lstrKanaSimei = "" Then
lstrRet = "*"
Else
lstrKanaSimei = Replace(lstrKanaSimei, "ヂ", "シ")
lstrKanaSimei = Replace(lstrKanaSimei, "ヅ", "ス")
lstrKanaSimei = Replace(lstrKanaSimei, "ャ", "ヤ")
lstrKanaSimei = Replace(lstrKanaSimei, "ュ", "ユ")
lstrKanaSimei = Replace(lstrKanaSimei, "ョ", "ヨ")
lstrKanaSimei = Replace(lstrKanaSimei, "゛", "")
lstrKanaSimei = Replace(lstrKanaSimei, "゜", "")

lintLength = Len(lstrKanaSimei)
lstrRet = lstrKanaSimei

For lintIdx = 2 To lintLength
If Mid(lstrKanaSimei, lintIdx, 1) = "ウ" Then
If Mid(lstrKanaSimei, lintIdx - 1, 1) = "オ" Or _
Mid(lstrKanaSimei, lintIdx - 1, 1) = "コ" Or _
Mid(lstrKanaSimei, lintIdx - 1, 1) = "ソ" Or _
Mid(lstrKanaSimei, lintIdx - 1, 1) = "ト" Or _
Mid(lstrKanaSimei, lintIdx - 1, 1) = "ノ" Or _
Mid(lstrKanaSimei, lintIdx - 1, 1) = "ホ" Or _
Mid(lstrKanaSimei, lintIdx - 1, 1) = "モ" Or _
Mid(lstrKanaSimei, lintIdx - 1, 1) = "ヨ" Or _
Mid(lstrKanaSimei, lintIdx - 1, 1) = "ロ" Then
Mid(lstrRet, lintIdx, 1) = "オ"
End If
End If
Next lintIdx
End If

fncSeionConv = lstrRet
End Function
    • good
    • 0
この回答へのお礼

すばやいご回答、ありがとうございました。
なるほど、Postgresでは無理なのですか・・・
PrintScreeさんのおっしゃる方法でやってみようと思います!
ありがとうございました(^^)

お礼日時:2006/05/17 16:21

カナのソートでお望みの事をやりたい場合、現状のデータ内容では無理です。



カナでソートさせたい場合、清音処理を行った項目を別途作る必要があります。

清音処理とは、「ぁぃぅぇぉ」は全て「あいうえお」に変換し、濁音や半濁音の「ぱば」は「はは」にします。

このように清音処理をした結果に対してソートを行えばお望みの結果になるはずです。
その為にはデータメンテナンスが必須ですね。
私はExcelやAccessを使用して清音処理プログラムを作り「清音カナ」を作りました。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す