我需要分开这个:
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";}
由;
提取字符串末尾附近找到的值2011
。即使拔出s:4:"2011"
也行不通。
我目前正在使用此代码:
REPLACE(SUBSTRING_INDEX(address, ';', 10), LENGTH(SUBSTRING_INDEX(address, ';', 10 -1)) + 1), ';', '')
我是从一个网站上得到的,它将其列为在MySQL中拆分字符串的解决方案......但它中存在语法错误。我尝试调试它,发现有一个)
太多,但我无法弄清楚如何更改它以使其工作......我不知道如何分割字符串。
与this solution ...
相比,这似乎过于复杂有人可以提供帮助吗?解释它是如何工作的,或者替代解决方案也可以。
谢谢!
答案 0 :(得分:3)
阅读SUBSTRING_INDEX
和REPLACE
的文档,它会更清楚代码尝试做什么。
请注意SUBSTRING_INDEX(address,';',10)
检索address
的所有;
,直至第{10}出现s:4:"2011"
,因此在您的情况下,从字符串的开头到REPLACE(string,from,to)
。< / p>
from
用to
替换REPLACE
的所有出现。看起来您尝试的代码试图将所有内容替换为第9个';'没有任何东西(通过s:4:"2011"
),并且在第10个'之后也切掉一切';'。这将留下's:4:“2011”'。
您可以提取SUBSTRING_INDEX(address,';',-4)
的一种方法是使用;
,它返回从第4个s:4:"2011";s:7:"country";s:9:"Australia";}
开始的所有内容。在您的情况下,那将是SUBSTRING_INDEX(...,';',1)
。
然后,在此结果字符串上使用;
,以便在s:4:"2011"
第一次出现之前获取所有内容,即SUBSTRING_INDEX(SUBSTRING_INDEX(address,';',-4),';',1)
。
总结:
{{1}}
我确信还有其他方法可以做到。
答案 1 :(得分: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);