1

これを分割する必要があります:

a:6:{s:8:"address1";s:11:"2 Bourke St";s:8:"address2";s:13:"Woolloomooloo";s:4:"city";s:6:"Sydney";s:5:"state";s:3:"NSW";s:11:"postal_code";s:4:"2011";s:7:"country";s:9:"Australia";}

byを使用して、文字列の末尾近くに;ある値を取り出します。2011引っ張ってもうまくいきs:4:"2011"ます。

私は現在このコードを使用しています:

REPLACE(SUBSTRING_INDEX(address, ';', 10), LENGTH(SUBSTRING_INDEX(address, ';', 10 -1)) + 1), ';', '')

MySQLで文字列を分割するためのソリューションとしてリストされているサイトから入手しました...しかし、構文エラーがあります。私はそれをデバッグしようとしましたが、1 つが多すぎることがわかりましたが、それを機能)させるために変更する方法を理解できませんでした...これが文字列を分割する方法を理解していません。

このソリューションに比べて複雑すぎるようです...

誰でも支援を提供できますか? それがどのように機能するかの説明が素晴らしいか、代替ソリューションも同様に機能します.

ありがとう!

4

2 に答える 2

3

SUBSTRING_INDEXandのドキュメントを読むREPLACEと、コードが何をしようとしているのかがより明確になります。

の 10 回目の出現までのSUBSTRING_INDEX(address,';',10)すべてを取得することに注意してください。したがって、この場合、文字列の先頭から.address;s:4:"2011"

REPLACE(string,from,to)fromの出現箇所をすべて に置き換えますto。あなたが試したコードは、9 番目の「;」までのすべてを置き換えようとしているようです。何も付けずに ( を介してREPLACE)、10 番目の ';' 以降をすべて切り捨てます。これにより、「s:4:"2011"」が残ります。

抽出できる 1 つの方法は、最後から 4 番目以降のすべてを返す whichs:4:"2011"を使用することです。あなたの場合、それは.SUBSTRING_INDEX(address,';',-4);s:4:"2011";s:7:"country";s:9:"Australia";}

次に、この結果の文字列を使用して、SUBSTRING_INDEX(...,';',1)の最初の出現前のすべてを取得します。;s:4:"2011"

要約すれば:

SUBSTRING_INDEX(SUBSTRING_INDEX(address,';',-4),';',1)

私はそれを行う他の方法もあると確信しています。

于 2012-03-21T23:59:49.227 に答える
0

これでうまくいくはずです-

SET @a := 'a:6:{s:8:"address1";s:11:"2 Bourke St";s:8:"address2";s:13:"Woolloomooloo";s:4:"city";s:6:"Sydney";s:5:"state";s:3:"NSW";s:11:"postal_code";s:4:"2011";s:7:"country";s:9:"Australia";}';
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(@a, ';', -4), ';', 1);
于 2012-03-21T23:56:32.440 に答える