2

後方参照された文字列を小文字にしようとしていますが、うまくいきません。:(ルートの後の最初の文字を下げたいだけです。

my_string = "<root>Here is July's best food</root>"

正しいものは次のとおりです。

my_string = "<root>here is July's best food</root>"

これが私のクエリです:

UPDATE my_table
SET my_string = regexp_replace(my_string, '<root>(.)', lower(E'<root>\\1'))
WHERE my_id = 1;
4

1 に答える 1

1

split_part()と_lower()

 select '<root>'||lower(split_part(split_part('<root>Here is July''s best food</root>',' ',1),'>',2)) || split_part('<root>Here is July''s best food</root>',split_part(split_part('<root>Here is July''s best food</root>',' ',1),'>',2),2)

結果:

 "<root>here is July's best food</root>"

UPDATE my_table
SET my_string =  '<root>'||lower(split_part(split_part(my_string,' ',1),'>',2)) || split_part(my_string,split_part(split_part(my_string,' ',1),'>',2),2) 
WHERE my_id = 1;

次の機能はオプションです

以下のような関数を作ることができます

 create or replace function lower_first_word(txt text,del text) returns text as
$$
 select del||lower(split_part(split_part(txt ,' ',1),'>',2)) || split_part(txt ,split_part(split_part(txt ,' ',1),'>',2),2)
$$
language sql 

そしてアップデート

UPDATE my_table
    SET my_string = lower_first_word('<root>Here is July''s best food</root>','<root>')
    WHERE my_id = 1;

また

regexと_substring()

select lower(substring('<root>Here is July''s best food</root>',E'[A-Za-z<>]+'))||substring('<root>Here is July''s best food</root>',E'[^ ]* (.*)')

そして更新ステートメントは

UPDATE my_table
SET my_string = lower(substring('<root>Here is July''s best food</root>', E '[A-Za-z<>]+')) || substring('<root>Here is July''s best food</root>', E '[^ ]* (.*)')
WHERE my_id = 1;
于 2015-11-20T09:15:25.903 に答える