我有一张这样的表:
<!DOCTYPE html>
<html>
<body>
<table border="1" style="width:100%">
<tr>
<td>email</td>
<td>data</td>
</tr>
<tr>
<td>creator_a@creator.com</td>
<td>"vimeo_profile"=>"", "twitter_profile"=>"", "youtube_profile"=>"", "creator_category"=>"production_company", "facebook_profile"=>"", "linkedin_profile"=>"", "personal_website"=>"", "instagram_profile"=>"", "content_expertise_categories"=>"4,5,8"</td>
</tr>
<tr>
<td>creator_b@creator.com</td>
<td>"twitter_profile"=>"", "creator_category"=>"association", "facebook_profile"=>"", "linkedin_profile"=>"", "personal_website"=>"", "content_expertise_type"=>"image", "content_expertise_categories"=>"4, 6"</td>
</tr>
</table>
</body>
</html>
我想使用PostgreSQL查询,所以我只得到关于content_expertise_categories
的值:
*重要的是要提到值的数量不同。该表有更多条目,所以我正在寻找一个解决方案,帮助我提取值,无论是否有2或15个值。
<!DOCTYPE html>
<html>
<body>
<table border="1" style="width:100%">
<tr>
<td>email</td>
<td>data</td>
</tr>
<tr>
<td>creator_a@creator.com</td>
<td>4,5,8</td>
</tr>
<tr>
<td>creator_b@creator.com</td>
<td>4,6</td>
</tr>
</table>
</body>
</html>
我尝试了substring
但无法使其发挥作用。
非常感谢一些帮助,谢谢!
答案 0 :(得分:0)
SELECT
email,
(string_to_array(
data::text,'"content_expertise_categories"=>'::text
)
)[2] as data
FROM users
;
<强>更新强>
在您的示例中,所有字符串都包含&#34; content_expertise_categories&#34;最后列出,这可以让你认为你可以将字符串分成两部分。如果您之后碰巧有更多的php数组定义值,那么您需要在',"'
上进行额外拆分,并且这次需要[1]部分...
在"data"
函数中使用列::text
之前,请将其content_expertise_categories
置于其中,因为它需要文本类型,而您的列似乎不是这样。
我相信这个问题会更优雅:
select
email,
data->'content_expertise_categories' as data
from h
;
但是当我发布第一个查询时,我不知道你使用的是hstore