我有以下查询:
SELECT *
FROM user_info
WHERE phone_number IN (:phoneNumbers)
我不想通过确切的电话号码搜索,而是要对每个电话号码进行搜索。我如何实现?
您必须使用LIKE
语句:
SELECT * FROM user_info WHERE phone_number LIKE '123%'
此查询将从123开始匹配所有音纤维器。如果您需要匹配包含123的音载体,则应使用:
SELECT * FROM user_info WHERE phone_number LIKE '%123%'
现在,它将匹配任何包含123的音载体,在PostgreSQL中,您不需要施放一个数字来字符串(PostgreSql自动为您使用)。
您可以使用类似于Regex的PostgreSQL。
您可以通过数组:
SELECT *
FROM user_info
WHERE phone_number like any ( array['123%', '456%'] );
不确定如何通过
您可以做一些可怕的解决方法,例如:
t=# with a as (values('some','postg','temp'))
, p as (select unnest(string_to_array(translate((a.*)::text,'()',''), ',')) patt from a)
select datname,concat(patt,'%') from p left outer join pg_database on datname like concat(patt,'%');
datname | concat
-----------+--------
| some%
postgres | postg%
template1 | temp%
template0 | temp%
(4 rows)
在这里,我使用外部加入来演示其工作原理(some%
与任何dbname不匹配,因此datname为null)。列表'some','postg','temp'
应放入values
,而不是IN
标量列表。另外,我知道我的dtabases名称中没有()
,因此在此处使用translate
,而不是首先和最后一个括号。