春季JDBC PostgreSQL在其中



我有以下查询:

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%'] );

不确定如何通过

从Spring JDBC模板中传递数组

您可以做一些可怕的解决方法,例如:

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,而不是首先和最后一个括号。

最新更新