如何将 NamedJdbcTemplate 与 Postgres 正则表达式一起使用

How to use NamedJdbcTemplate with Postgres regular expressions

我正在使用 Postgres:9.5.5 和 Spring-Jdbc:4.3.7.

我在 postgres 中的 select 看起来像这样:

select id, birth_date, fullname from some_table where fullname ~ '\mSTACK\M'

如果全名包含单词 "STACK",则 return 为真。

我在 Java (8) 中使用 NamedJdbcTemplate:

生成此查询时遇到问题
String sql = "select id, fullname, birth_date from some_table where fullname ~ '\m:name\M' and birth_date = :birth_date";

SqlParameterSource params = new MapSqlParameterSource()
    .addValue("name", "STACK")
    .addValue("birth_date", "22.07.2002");

namedJdbcTemplate.query(sql, params, ....);

JDBC生成的结果SQL:

SELECT id, fullname, birth_date FROM some_table WHERE fullname ~ '\m:name\M' AND birth_date = ?;

如您所见,birth_date 参数没有问题, 但是 JDBC 没有输入“?”字符而不是参数“:name”。

我如何向 JDBC 解释我的参数“:name”被正则表达式包围?

谢谢!

'\m:name\M' 这个结果是合乎逻辑的,因为你使用正则表达式和两个引号之间的参数。

您可以使用 || 将正则表达式与单词连接起来,如下所示:

fullname ~ ('\m' || :name || '\M')

如果 :name 参数等于 STOCK 这将产生类似这样的结果:

fullname ~ '\mSTOCK\M'