2

星で囲まれた特定の単語を含む文字列が与えられた場合、たとえば

The *quick* *brown* fox jumped over the *lazy* dog

星で囲まれた単語を大文字に変換できますか?

QUICK BROWN キツネが LAZY 犬を飛び越えた

テーブル「文」の列「文」にテキストがある場合、次のように単語をマーク/抽出できます。

SELECT regexp_replace(sentence,'\*(.*?)\*','STARTUPPER\1ENDUPPER','g') FROM sentences;

しかし、大文字変換の最初の試みはうまくいきません:

select regexp_replace(sentence,'\*(.*?)\*','' || upper('\1'),'g') from sentences;

スターを開始マーカーと終了マーカーに置き換えた後、substring() を使用してパーツを分割することを考えましたが、スター付きの単語が複数あると失敗します。

4

2 に答える 2

2

次のような PL/pgSQL 関数を作成できます。

CREATE FUNCTION upper_asterisk(inp_str varchar)
RETURNS varchar AS $$
DECLARE t_str varchar;
BEGIN

  FOR t_str IN (SELECT regexp_matches(inp_str,'\*.+\*','g'))
  BEGIN
    inp_str := replace(inp_str, t_str, upper(t_str));
  END;

  RETURN inp_str;
END;
$$  LANGUAGE plpgsql;

(テストしていないため、バグがある可能性があります)。

または、利用可能な言語を使用して、DB 内にそのような関数を記述します。

于 2013-09-09T14:05:52.413 に答える