7

Postgres で配列検索を行うと、次のように少なくとも 1 つのタグに一致します。

SELECT * FROM users WHERE tags && ['fun'];

| id | tags      |
| 1  | [fun,day] | 
| 2  | [fun,sun] |

プレフィックスで一致させることは可能ですか? 何かのようなもの:

SELECT * FROM users WHERE tags LIKE 'f%';

| id | tags      |
| 1  | [fun,day] | 
| 2  | [fun,sun] |
| 3  | [far]     | 
| 4  | [fin]     |
4

2 に答える 2

5

これを試して

create table users (id serial primary key, tags text[]);

insert into users (tags)
values
  ('{"fun", "day"}'),
  ('{"fun", "sun"}'),
  ('{"test"}'),
  ('{"fin"}');

select *
from users
where exists (select * from unnest(tags) as arr where arr like 'f%')

SQL フィドルの例

于 2013-07-10T05:28:48.947 に答える
3

これは、多かれ少なかれあなたが求めているものを得るはずの実用的な例です。このアプローチがスケーリングすると主張しているわけではないことに注意してください...

create table users (
id      serial primary key,
tags    text[] not null
);

insert into users (tags) values
('{"aaaa","bbbb","cccc"}'::text[]),
('{"badc","dddd","eeee"}'::text[]),
('{"gggg","ffbb","attt"}'::text[]);

select *
from (select id,unnest(tags) arr from users) u
where u.arr like 'a%';

 id | arr  
----+------
  1 | aaaa
  3 | attt
于 2013-07-10T02:45:36.657 に答える