MYSQL で最後に出現した部分文字列を空白文字列に置き換えるにはどうすればよいですか?MYSQL でそのような直接関数を見つけることができませんでした
文字列: "American Corp National Corp"
検索文字列: "Corp"
期待される出力: "American Corp National"
誰でも提案できますか?
これは短くて読みやすいです:
SELECT TRIM(TRAILING 'Corp' FROM 'American Corp National Corp')
試す:
select reverse(concat(
left(reverse('American Corp National Corp'),
instr(reverse('American Corp National Corp'),reverse('Corp'))-1),
substr(reverse('American Corp National Corp'),
instr(reverse('American Corp National Corp'),reverse('Corp'))+
length('Corp')))) result
( SQLフィドル)
これはひどい方法のように感じますが...文字列、を使用して検索文字列reverse
の最初の出現を検索し、反転されていない文字列にあるインデックスを計算しますか?reverse
locate
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_reverse
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_locate
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_char-length (Unicode に準拠するには、長さの代わりにこれを使用する必要がありますが、念のために確認してください!)
作業例:
文字列: 0123456789 (char_length = 10)
検索文字列: 567 (char_length = 3)
逆文字列: 9876543210
逆引き検索文字列: 765
返品指数の特定 = 2
実際の文字列の末尾のインデックス = 7 (char_length(文字列) - 1 - インデックス -> 10 - 1 - 2)
実際の文字列の開始インデックス = 5 (char_length(文字列) - 1 - (char_length(検索文字列) - 1) - インデックス -> 10 - 1 - (3 - 1) - 2)