C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: SQL:文字列変換処理について


(過去ログ 46 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■24830 / inTopicNo.1)  SQL:文字列変換処理について
  
□投稿者/ hana (30回)-(2008/09/10(Wed) 16:16:52)

分類:[データベース全般] 

いつもお世話になっております。
SQL文について質問させていただきます。

SQLのreplace() 関数を用いて、文字列を変換する処理を作成しております。
例)select replace('a0a1a2', 'a0', 'b1') from dual →この場合の結果は「b1a1a2」となる

【やりたいこと】
変換対象文字列の中に同じ文字列が複数含まれる場合は
初めの1つだけを変換したいのですが、
上記例の通りに行うと
'a0'は全て'b1'に変換されてしまいます。
※select replace('a0a1a2a0', 'a0', 'b1') from dual の場合、
 結果は「b1a1a2b1」となるが「b1a1a2a0」と変換したい。

replace() 関数では不可能でしょうか?
実現方法をご存知の方、ご教授をよろしくお願い致します。
引用返信 編集キー/
■24832 / inTopicNo.2)  Re[1]: SQL:文字列変換処理について
□投稿者/ みきぬ (76回)-(2008/09/10(Wed) 16:36:47)
とりあえずデータベース名とバージョンを聞こう。話はそれからだ。

…たぶん、SQLのReplace関数では無理だと思う。
取得してからプログラム側で置換するのが手っ取り早そう。
引用返信 編集キー/
■24833 / inTopicNo.3)  Re[2]: SQL:文字列変換処理について
□投稿者/ hana (31回)-(2008/09/10(Wed) 16:48:19)
No24832 (みきぬ さん) に返信
> とりあえずデータベース名とバージョンを聞こう。話はそれからだ。
>
> …たぶん、SQLのReplace関数では無理だと思う。
> 取得してからプログラム側で置換するのが手っ取り早そう。

返信、ありがとうございます。
データベースは、「Oracle 10g Standard Edition One CPU ライセンス」を使用しております。

よろしくお願い致します。

引用返信 編集キー/
■24834 / inTopicNo.4)  Re[1]: SQL:文字列変換処理について
□投稿者/ 魔界の仮面弁士 (843回)-(2008/09/10(Wed) 16:59:23)
No24830 (hana さん) に返信
> 例)select replace('a0a1a2', 'a0', 'b1') from dual →この場合の結果は「b1a1a2」となる

DUAL ということは Oracle かな。であれば、こんな感じ。

SELECT REGEXP_REPLACE( 'a0a1a2a0a1a2', 'a0', 'b1', 1, 1, 'c') FROM DUAL

# 10g以降のみ。9i以下では使えません。
引用返信 編集キー/
■24835 / inTopicNo.5)  Re[2]: SQL:文字列変換処理について
□投稿者/ hana (32回)-(2008/09/10(Wed) 17:15:43)
No24834 (魔界の仮面弁士 さん) に返信
> ■No24830 (hana さん) に返信
>>例)select replace('a0a1a2', 'a0', 'b1') from dual →この場合の結果は「b1a1a2」となる
>
> DUAL ということは Oracle かな。であれば、こんな感じ。
>
> SELECT REGEXP_REPLACE( 'a0a1a2a0a1a2', 'a0', 'b1', 1, 1, 'c') FROM DUAL
>
> # 10g以降のみ。9i以下では使えません。


ご教授頂いた関数REGEXP_REPLACE()で、できました。
なるほど、REGEXP_REPLACE()関数は置換回数を指定できるのですね。
文字解析して置換しなければならないかなと思っていたので、便利な関数があって助かりました。

本当に、ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -