如何将 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'
我正在使用 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'