サラリーマンのすらすらIT日記

IT関連を中心とした日々を綴ります。
--/--/--

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2013/07/31

PostgreSQL-全角半角を区別しない検索

あるPostgreSQLのデータを見ると、データの英数字部分に全角データと半角データが混在していました。検索プログラムはPHPで書いています。その両方を検索対象とする場合、方法としては2通りあります。

1.PostgreSQL側で両方を検索対象とするSQLを発行する。
2.PHP側で両方を検索対象とするSQLを発行する。


おそらく1の方が処理が速いはずなので、1でやってみることに。さっそくWebで検索すると、その方法がありました。こちらです。

考え方としては、対象フィールドの英数字をすべて全角に変換してからlike評価するというもの。このサイトには次のような例が挙げられていました。

SELECT 商品cd, 商品名 FROM t_商品台帳
WHERE translate(upper(商品名), '-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ ', '-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ ') LIKE 'A4%';

translate関数というのは知りませんでした。sedのyコマンドのような感じです。やってみるとこの方法でできました。

ただ実際にはカタカナについても全角・半角が混在しています。カタカナの場合はこの関数ではうまくいきません。上記サイトにも書いてありますが、濁点・半濁点は半角2文字を全角1文字にする必要があるため(例えば「ガ」→「ガ」)。とすると、2のPHPによる方法を用いることになるでしょうか。

function han2zen($string) {
$hash = array(
"ガ" => "ガ",
"ギ" => "ギ",
// 以下続く
// ...
// ...
);
return strtr($string, $hash);
}

こういう関数を用意しておくというわけです。ちょっと面倒になってきました。

スポンサーサイト

コメント

コメントの投稿

  • URL
  • コメント
  • パスワード
  • 秘密
  • 管理者にだけ表示を許可する

トラックバック

トラックバックURL:http://sookibizviz.blog81.fc2.com/tb.php/1638-a3894cb1

■  カレンダー

08 | 2017/09 | 10
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

■  プロフィール

sookibizviz

Author:sookibizviz
仕事の内容やソフトの紹介を交えながら、日々の悪戦苦闘を綴っていきます。

■  最新記事

■  最新コメント

■  最新トラックバック

■  月別アーカイブ

■  カテゴリ

未分類 (64)
BizViz (24)
IT (1119)
計量 (76)
環境 (26)
数学 (181)
ニュース (46)
本 (187)
音楽 (113)
囲碁 (5)
将棋 (26)
ブログ (14)
日記 (19)

■  FC2カウンター

■  検索フォーム

■  RSSリンクの表示

■  QRコード

QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。