gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 12:52:53 24 4
gpt4 key购买 nike

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

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

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

如果全名包含单词“STACK”,它将返回 true。

我在使用 NamedJdbcTemplate 在 Java (8) 中生成此查询时遇到问题:

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'

关于java - 如何将 NamedJdbcTemplate 与 Postgres 正则表达式一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50020070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com