Предполагая это определение таблицы:
CREATE TABLE posthistory(post_id int PRIMARY KEY, tags text);
В зависимости от того, что вы хотите именно:
Чтобы преобразовать строку в массив, обрежьте начальные и конечные символы «‹>», а затем используйте «>‹» как разделитель:
SELECT *, string_to_array(trim(tags, '><'), '><') AS tag_arr
FROM posthistory;
Чтобы получить список уникальных тегов для всей таблицы (я думаю, вам это нужно):
SELECT DISTINCT tag
FROM posthistory, unnest(string_to_array(trim(tags, '><'), '><')) tag;
Для неявного соединения LATERAL
требуется Postgres 9.3 или более поздней версии.
Это должно быть значительно быстрее, чем использование регулярных выражений. Если вы хотите попробовать регулярное выражение, используйте regexp_split_to_table()
вместо regexp_split_to_array()
, за которым следует unnest()
, как это предлагается в другом ответе:
SELECT DISTINCT tag
FROM posthistory, regexp_split_to_table(trim(tags, '><'), '><') tag;
Также с неявным соединением LATERAL
. Связанный:
Для поиска определенных тегов:
SELECT *
FROM posthistory
WHERE tags LIKE '%<security>%'
AND tags LIKE '%<osx>%';
Скрипт SQL.
Применительно к вашему поиску в T-SQL в нашем проводнике данных:
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-SQL используется нестандартный +
вместо ||
.)
https://data.stackexchange.com/apple/query/edit/417055
person
Erwin Brandstetter
schedule
29.12.2015
WHERE TagName = ##TagName:String?osx##
также не является допустимым T-SQL. Я предполагаю, что DataExplorer выполняет некоторую предварительную обработку запросов - person a_horse_with_no_name   schedule 28.12.2015