- PR -

SQLで文字列変換(半角カナ→全角カナなど)

投稿者投稿内容
にゃんぱん
会議室デビュー日: 2005/11/21
投稿数: 7
投稿日時: 2005-11-21 20:29
はじめまして、SQLServer初心者です。
今回、データの移行作業をするにあたって
データのクリーニングが必要になったのですが、
SQLサーバに不慣れなことと、私自身の力不足のためなかなか解決しません。
また、周りに聞ける人もいなく、苦慮しています。

【作業】
SQLServerでSQLによるデータ抽出の際に
変換文字列で指定された文字変換を行う。

【環境】
OS:WindowsNT4.0
DB:SQLServer6.5

【変換文字列】
半角カナ   → 全角カナ
改行/タブ  → 全角空白

どこかにサンプルなどあればよいのですが、
なかなか見つけることができず。。。
また、Oracleのほうは分かったのですが、
SQLServerで同じ作業を行うには、どうすればよいのかよく分かりません。
どうぞよろしくご教授願います。


[ メッセージ編集済み 編集者: にゃんぱん 編集日時 2005-11-21 20:40 ]

[ メッセージ編集済み 編集者: にゃんぱん 編集日時 2005-11-23 22:57 ]

[ メッセージ編集済み 編集者: にゃんぱん 編集日時 2005-11-23 22:58 ]
でっち6号
大ベテラン
会議室デビュー日: 2005/01/31
投稿数: 176
お住まい・勤務地: Kawasaki
投稿日時: 2005-11-24 10:38
こんにちは、でっちです。

引用:

【作業】
SQLServerでSQLによるデータ抽出の際に
変換文字列で指定された文字変換を行う。


これは特定列だけ変換できれば良いのでしょうか?
それとも、抽出される全項目だったりするのでしょうか?
前者であればReplace関数が使えると思いますが...

Oracleでの対応操作を詳しく書いて頂けますか?
そちらの方がイメージが掴みやすいと思います。
にゃんぱん
会議室デビュー日: 2005/11/21
投稿数: 7
投稿日時: 2005-11-24 17:12
ありがとうございます。

特定列だけ変換できれば良いですが、
Replace関数がSQLServer6.5では使えない(?)ようで困っています。

EnterprizeManagerのHELPなどで検索してみたのですが、
文字列関数内に、Replaceの記述が見つかりませんでした。

SQLServer6.5でも、Replace関数は使用可能なのでしょうか?
でっち6号
大ベテラン
会議室デビュー日: 2005/01/31
投稿数: 176
お住まい・勤務地: Kawasaki
投稿日時: 2005-11-24 20:19
でっちです。

6.5ですか。
今手元には古いものでは6.0のTransact-SQLのリファレンスしかないのですが、確かにReplaceはありませんね。

置換対象文字のデータ内での出現回数が1回以下であればCharIndexとSubstringやStuffを組み合わせることで代替可能でしょうが、2回以上であれば難しいように思われます。

ちょっと話題が反れてしまうかもしれませんが、
引用:

今回、データの移行作業をするにあたって
データのクリーニングが必要になったのですが、


この部分と文字置換の繋がりが良く分りません。
ひょっとして既存データは書き換えてしまって良いのでしょうか?
もしそうであれば、AccessとODBC接続すれば、AccessのクエリとしてReplaceが使用可能なのですが...
もしくは、移行作業をAccess経由にしてしまうとか...
にゃんぱん
会議室デビュー日: 2005/11/21
投稿数: 7
投稿日時: 2005-11-24 21:03
お世話になります。

移行元データは、氏名カナやコメント(メモ書き)を
フリーフォーマットで登録していて、
半角カナ文字や改行、タブなどが混在しています。
そのため、出現回数も複数回が想定されています。

また、移行先は半角カナ等を許しておらず
移行元から移行先へ移す際に半角カナ→全角カナへ変換が必要となります。

それと、既存データを置き換えるのではなく
一旦ワークテーブルなどにデータを抽出するのですが、
その抽出の際に、文字の置き換えを行って
移行対象データとして出力する予定です。

また、CSV形式で出力して移行先へ渡すため、
改行などが混在するとフォーマットが崩れると思われるため
こちらも変換が必要となっています。

あと、データ件数などにもよるのでしょうが、
ACCESSでは処理時間に心配が残ります。
(私がACCESSについて詳しくないだけかもしれませんが・・・。)

でっち6号
大ベテラン
会議室デビュー日: 2005/01/31
投稿数: 176
お住まい・勤務地: Kawasaki
投稿日時: 2005-11-24 21:45
でっちです。

Access君もそうそう捨てたものでもないですよ
ちょっと実験してみましたが、それ程能力の高くない私の端末でも
40万件のReplaceによる更新を20秒程度で処理してくれましたから。

とりあえず、最終手段として
1.Accessにインポート
2.Replaceでデータの置き換え
3.ワークテーブルへの書き込み or CSV出力
と言う手順も頭に置いておいて下さい。

とりあえずこれ以上は思いつかないので、私は引っ込みます。
あまりお役に立てず申し訳ないです。m(_ _)m
にゃんぱん
会議室デビュー日: 2005/11/21
投稿数: 7
投稿日時: 2005-11-24 22:32
でっちさん、ありがとうございました!

ACCESSというアイデアは
私では出すことができなかったと思います。

また、ご自身の環境で実験までして頂き
大変感謝しております。
貴重なご意見、本当にありがとうございました。m( __)m
明智重蔵
大ベテラン
会議室デビュー日: 2005/09/05
投稿数: 127
投稿日時: 2005-11-25 10:28
単に変換するだけなら秀丸できますね
全て選択して、半角カナを全角カナに変換して

\n|\t
を全角空白に置換


サイズの大きいテキストファイルを扱う時は、秀丸がオススメです


[ メッセージ編集済み 編集者: 明智重蔵 編集日時 2005-11-25 11:35 ]

スキルアップ/キャリアアップ(JOB@IT)