SQLについて質問です。


現在データベースの文字を置換する事をしているのですが 

- (半角ハイフン)を 全角の ー  にしたいのですが

どうやっても置換することが出来ません。

例えば

★テーブル TEST

★項目 KOUMOKU1

KOUMOKU1 に入っているデータすべての -(半角ハイフン)をー(全角ハイフン)に置換する場合

UPDATE TEST SET `KOUMOKU1` = REPLACE(`KOUMOKU1`,'-','ー')

としました。

しかし変化がありません。

数字等は置換できるのにハイフンだけ出来ないのは何か理由があるのでしょうか?

対応策がわかる方おりましたらよろしくお願いいたします。

回答の条件
  • 1人2回まで
  • 登録:2009/09/05 00:09:15
  • 終了:2009/09/06 15:27:38

ベストアンサー

id:goog20090901 No.1

goog20090901回答回数637ベストアンサー獲得回数172009/09/05 14:48:29

ポイント60pt

>最初に全角の文字が入っているとバグが発生してしまいます。

***********

>SELECT KOUMOKU1 FROM TEST WHERE KOUMOKU1 LIKE '%-%';

>の形式で実行してみたのですがハイフンがあるものを選択することが出来ない状況です。

DBの文字コードと一致していないのでは?

DBにコネクションにいくときに文字コードを明示的に指定してみては?

id:aiomock

ご回答ありがとうございます。

データは最初に全角が入っています。

全角文字列の後に、1758-126 がきており この数字とハイフンだけ半角数字に変換したいと思っていたのですが文字化けしました。

全角文字の後の変換というのはどうしても出来ないのでしょうか?

文字コードを入力するといいのですね。

MYSQL の ハイフンの文字コードを調べてみます。

2009/09/05 15:34:14
  • id:aiomock
    現在半角の文字を全角へ置換するという作業をデータベースで行っています。

    1→1
    2→2
    (半角スペース)→ (全角スペース)
    - → -

    数字は置換できるのですが 半角スペースを全角スペース 半角ハイフンを全角ハイフン が出来ません。

    また

    最初に全角の文字が入っているとバグが発生してしまいます。

    1758-126 という文字が入っている項目に至っては

    csーcuャブャVーーceャrーーc_ブリュー-csーcエルューc・[

    となってしまいます。

    SQLで置換をする際に気をつける点というのがあるのでしょうか?
  • id:taknt
    何か文字コードが違うものを使ってやっているような感じがする。
    たとえば PHPでSQLを実行させているとか?
  • id:khazad-Lefty
    SQLとだけ書いても、DBが何かわからないと回答のしようがないです。
    ORACLE? MS-SQLServer? MySQL? それとも…
  • id:kn1967
    【可能性1】文字化け
      SELECT "UPDATE TEST SET `KOUMOKU1` = REPLACE(`KOUMOKU1`,'-','ー')";
      テスト例としては、あまりにも配慮にかけ、お粗末だけど、
      既に、稼動してきている実績を考えると、
      そもそも文字化けでは無い可能性のほうが高そうなので、この程度で・・・。

    【可能性2】ハイフンだと思っていたのだが実は・・・?
      SELECT KOUMOKU1 FROM TEST;
      SELECT KOUMOKU1 FROM TEST WHERE KOUMOKU1 LIKE '%-%';
      以上二つの結果を比較してみて、
      ハイフンを含んでいるレコードを正しく抽出できるかを確認する。
      抽出できないとすれば、それはハイフンではなかったという事に・・・。

    いずれも現状では、決定打にかけるので、以上コメントのみ。



  • id:aiomock
    情報不足で申し訳ありません。

    データベースですが先ほど調べたところ MySql のバージョンが 4.0.27 になります。

    SQL命令ですが、MYSQLの中だけでしか実行しておらず、PHP経由では実行していないのに文字化けが起こります。

    >kn1967 さん

    SELECT KOUMOKU1 FROM TEST WHERE KOUMOKU1 LIKE '%-%';

    の形式で実行してみたのですがハイフンがあるものを選択することが出来ない状況です。

    文字化けの原因とハイフンが未だに解決出来ません。。

    考えられることがわかる方おりましたらよろしくお願いいたします。 
  • id:kn1967
    >PHP経由では実行していない

    phpMyAdminを使ってMySQLにSQLを投げているという事ですね。
    phpからMySQLにSQLを投げる場合と、phpMyAdminから投げる場合とでは、
    考えなければならない事が変わってくるので、次回からは
    「phpMyAdmin x.xx + MySQL 4.0.27」
    あるいは
    「php x.xx + MySQL 4.0.27」
    といったような具合に環境を明記しておくとよいでしょう。


    >ハイフンがあるものを選択することが出来ない状況です。

    SELECT KOUMOKU1 FROM TEST; のほうの結果が文字化けしていないのだとすれば、
    【可能性2】がさらに濃厚になってきそうな気がします。

    ハイフンですが、IMEをOFFにして直接入力してますか?
    IMEで漢字変換してたりしませんか?

    IMEで変換すると判ると思うのですが
      ー 全角長音
      - 全角マイナス
      - 半角ハイフンマイナス
      ― 全角ダッシュ
      ‐ 全角ハイフン
    といった具合に似たものがあり、
    特に全角ハイフンと半角ハイフンの見分けがつけにくかったりしますので、
    '%-%'の部分をそれぞれに変えてテストしてみてください。


    質問文 > -(半角ハイフン)をー(全角ハイフン)に置換
    回答1へのコメント > 数字とハイフンだけ半角数字に変換したい

    どちらにしても問題点は同じだと思われるが、
    内容が逆になってるのは解せないので、どちらかに統一を。
  • id:aiomock
    >ご回答頂いた方々

    丁寧にご回答頂き、ありがとうございます。

    今回自分でやってみましたがうまくできませんでした。

    エクセルのVBAで置換処理ができるのでそちらで対応する事に決めました。

    色々ご回答いただいたのですが本当に申し訳ありません。。

    質問を終了させていただきます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません