使用Postgresql提取特定值

时间:2015-12-30 12:06:21

标签: string postgresql substring extract

我有一张这样的表:

Table

<!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个值。

Result

<!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但无法使其发挥作用。

非常感谢一些帮助,谢谢!

1 个答案:

答案 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