• 締切済み

SQLを教えてください

ORACLE更新する際のSQLで困ってますので、SQLを教えてください。 TABLE1の中に項目MEMO(15桁)が存在します。 このMEMOに入っているデータは以下のとおりです。 MEMO 090-XXXX-XXX1 090-XXXX-XXX2 090-XXXX-XXX3 A B C 090-XXXX-XXX4 090-XXXX-XXX5 090-XXXX-XXX6 このデータの中で、上3行のデータ(090-XXXX-XXX1~090-XXXX-XXX3)のデータを 下3行のデータ( 090-XXXX-XXX4~ 090-XXXX-XXX6)のように 1桁目をスペースする形で統一したいと思います。 更新後のデータは以下のとおりです。 MEMO 090-XXXX-XXX1 090-XXXX-XXX2 090-XXXX-XXX3 A B C 090-XXXX-XXX4 090-XXXX-XXX5 090-XXXX-XXX6 このような場合のSQL作成方法はどのようにしたらいいのでしょうか? WHERE文については、 WHERE SUBSTR(MEMO,1,1) <> 'A' AND SUBSTR(MEMO,1,1) <> 'B' AND SUBSTR(MEMO,1,1) <> 'C' AND SUBSTR(MEMO,1,1) <> ' ' これでいいのかなと思うのですが、 作成方法について教えて頂きたく思います。 よろしくお願いします。

みんなの回答

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.2

>こちらでは万一変更前MEMOに15桁フルで使用されている場合は とありますが、CHAR(15)と定義しているのであれば全データが15桁まで半角スペースで埋められますよね。 http://download.oracle.com/docs/cd/E16338_01/server.112/b56299/sql_elements001.htm#i45647 ですので、 >090-XXXX-XXX1 >090-XXXX-XXX2 >090-XXXX-XXX3 >A >B >C >' 090-XXXX-XXX4' >' 090-XXXX-XXX5' >' 090-XXXX-XXX6' このようなデータはあり得ないわけです。実際には '090-XXXX-XXX1__' '090-XXXX-XXX2__' '090-XXXX-XXX3__' 'A______________' 'B______________' 'C______________ ' '_090-XXXX-XXX4_' '_090-XXXX-XXX5_' '_090-XXXX-XXX6_' というデータになっているはずです。(アンダースコアは半角スペース) 上記を踏まえて、更新後にどのようなデータになっていたらいいか提示していただけますか?

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.1

半角スペースが消えてしまっているのでデータが分かりづらいのですが、 update TABLE1 set MEMO = ' ' || MEMO where 記載の条件; で先頭に半角スペースを追加することができると思います。

nh582
質問者

お礼

早速教えて頂き、ありがとうございます。 スペース消えてたので、スペース対象分のみ前後に''でくくった形で再度記載しておきます。 (実際は''はありませんので、関係ありません。前スペースが消えてしまうので、 表示するための対処です。) 更新前のデータは以下のとおりです。 MEMO 090-XXXX-XXX1 090-XXXX-XXX2 090-XXXX-XXX3 A B C ' 090-XXXX-XXX4' ' 090-XXXX-XXX5' ' 090-XXXX-XXX6' 更新後のデータは以下のとおりです。 MEMO ' 090-XXXX-XXX1' ' 090-XXXX-XXX2' ' 090-XXXX-XXX3' A B C ' 090-XXXX-XXX4' ' 090-XXXX-XXX5' ' 090-XXXX-XXX6' それで、先ほど教えて頂いたUPDATE文、 update TABLE1 set MEMO = ' ' || MEMO where 記載の条件; ですが、 こちらでは万一変更前MEMOに15桁フルで使用されている場合は、 変更後MEMOは空白1桁+変更前MEMOの14桁までを編集した形で 最後の15桁目は削られてもよいと考えています。 現状ORACLEの設定ではMEMO CHAR(15)と指定していますが、 教えて頂いたSQLを実行してもエラー等は発生しないでしょうか? 一応、心配になったので再度質問させて頂きました。 お手数ですが、教えて頂ければ嬉しいです。 よろしくお願いします。

関連するQ&A