グレッグ・レダのソリューションは、(理由REPLACE方法の1つの文字を超える文字列で私のために動作しませんでした)(のみ置き換えられる文字列の最初の文字を置き換える)書かれていました。ここでは、より完全であり、問題のすべてのケースをカバーすると信じているソリューションです。「文字列A」の最初のオカレンスを「文字列C」の「文字列B」に置き換えるにはどうすればよいですか?
CONCAT(LEFT(buycraft, INSTR(buycraft, 'blah') - 1), '', SUBSTRING(buycraft FROM INSTR(buycraft, 'blah') + CHAR_LENGTH('blah')))
これは、エントリがすでに交換する文字列が含まれていることを確認していることを前提として!文字列 'pupper'の中で 'dog'を 'cat'と置き換えようとすると、 'per'が得られます。これはあなたが望むものではありません。
IF(INSTR(buycraft, 'blah') <> 0, CONCAT(LEFT(buycraft, INSTR(buycraft, 'blah') - 1), '', SUBSTRING(buycraft FROM INSTR(buycraft, 'blah') + CHAR_LENGTH('blah'))), buycraft)
ここでは特定のユースケースは、列「buycraft」内側「何とか」の最初のインスタンスを置き換えている:ここでは最初の文字列を置換するかどうかをチェックすることにより、完全な文字列内に存在することを扱うクエリがあります空の文字列 ''を使用します。
- 置き換えられる文字列の最初のオカレンスのインデックスを検索します。
- インデックス自体(「-1」)を除いて、すべてのものを左に取得します。
- 元の文字列を置き換える文字列に連結します。
- 置き換えられる文字列の部分の終了インデックスを計算します。これは、最初のオカレンスのインデックスを再度検索し、置き換えられた文字列の長さを追加することで簡単に行えます。これは、文字列の終了インデックスから始まり、元の文字列
- を連結部分文字列の後にあなたの最初の文字のインデックスを与える
「犬」と「lil_puppers_yay」で「pupper」を置き換えるの例のウォークスルー: 'pupper' の
- 指数は 'lil_'
- 'lil_dog' の連結し '犬' であるインデックス1-4、だから5
- は5-1 = 4の左GETです
- 終了インデックスを計算します。開始インデックスは5で、5 +長さは 'pupper' = 11です。インデックス11は 's'を指しています。
- 's_yay'である終了インデックスで始まる部分文字列を連結して 'lil_dogs_yay'を取得します。
すべて完了!
注: SQLには1つのインデックス付き文字列があります(SQL初心者の方は、この問題を理解する前にこれを知りませんでした)。また、SQL LEFTとSUBSTRINGは、理想的な方法で無効なインデックスを使用するように見えます(文字列の先頭または末尾に調整する)。これは、私のような初心者のSQLerにとって非常に便利です:P
別の注意:私はSQLの初心者ですが、これは私が今までに書いたことのない最も難しいクエリですので、非効率的なものがあります。しかし、それは正確に仕事を得る。
どのデータベースをお使いですか? –
mysqlデータベース@gjredaその説明に感謝します。 – stemie
私はmysqlデータベースを使用しています。 @gjredaありがとう、私はそのクエリを試みたが、エラーが発生します。 #1064 - SQL構文に誤りがあります。あなたのMySQLサーバーのバージョンに対応するマニュアルをチェックして、正しい構文を使用するようにしてください。 'UPDATE wp_posts SET post_content = REPLACE(SUBSTRING_INDEX(post_content、' A '、' 1行目) – stemie