首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取String - stackexchange数据库中的每个<tag>

获取String - stackexchange数据库中的每个<tag>
EN

Stack Overflow用户
提问于 2015-12-27 21:59:14
回答 1查看 144关注 0票数 1

我的问题的模拟代码:

代码语言:javascript
复制
SELECT Id FROM Tags WHERE TagName IN '<osx><keyboard><security><screen-lock>'

问题的细节

我正在尝试从apple.stackexchange数据中获取2011年使用的标签。(此查询)

作为能看见,标记更改中的标记以纯文本形式存储在Text字段中。

代码语言:javascript
复制
<tag1><tag2><tag3>
<osx><keyboard><security><screen-lock>

如何创建标记的唯一列表,以便在Tags表中查找它们,而不是这个硬编码版本:

代码语言:javascript
复制
SELECT * FROM Tags
  WHERE TagName = 'osx' 
     OR TagName = 'keyboard' 
     OR TagName = 'security'

这是一个交互示例

Stackexchange使用T,我的本地副本使用Postgres应用程序9.4.5.0版在postgresql下运行.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-29 06:11:30

假设此表定义如下:

代码语言:javascript
复制
CREATE TABLE posthistory(post_id int PRIMARY KEY, tags text);

具体取决于您想要的内容:

若要将字符串转换为数组,请修剪前导并尾随“<>”,然后将'><‘视为分隔符:

代码语言:javascript
复制
SELECT *, string_to_array(trim(tags, '><'), '><') AS tag_arr
FROM   posthistory;

要获得整个表的唯一标记列表(,我猜您想要这个):

代码语言:javascript
复制
SELECT DISTINCT tag
FROM   posthistory, unnest(string_to_array(trim(tags, '><'), '><')) tag;

隐式LATERAL联接需要Postgres9.3或更高版本。

这应该比使用正则表达式快得多。如果您想尝试regexp,请使用regexp_split_to_table()而不是regexp_split_to_array(),后面跟着unnest(),就像在另一个答案中建议的那样:

代码语言:javascript
复制
SELECT DISTINCT tag
FROM   posthistory, regexp_split_to_table(trim(tags, '><'), '><') tag;

也可以使用隐式LATERAL连接。相关信息:

要搜索特定的标记:

代码语言:javascript
复制
SELECT *
FROM   posthistory
WHERE  tags LIKE '%<security>%'
AND    tags LIKE '%<osx>%';

SQL Fiddle

应用于我们的数据资源管理器中的to搜索:

代码语言:javascript
复制
SELECT TOP 100
       PostId, UserId, Text AS Tags FROM PostHistory
WHERE  year(CreationDate) = 2011
AND    PostHistoryTypeId IN (3  -- initial tags
                           , 6  -- edit tags
                           , 9) -- rollback tags
AND    Text LIKE ('%<' + ##TagName:String?postgresql## + '>%');

(T语法使用非标准的+而不是||。)

https://data.stackexchange.com/apple/query/edit/417055

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34485255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档