我正在使用Postgres:9.5.5和Spring-Jdbc:4.3.7。
我在postgres中的选择看起来像这样:
select id, birth_date, fullname from some_table where fullname ~ '\mSTACK\M'
如果fullname包含单词“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”被正则表达式包围?
谢谢!
答案 0 :(得分:2)
'\m:name\M'
这个结果是逻辑,因为你使用你的正则表达式和两个引号之间的参数。
您可以使用||
将正则表达式与单词连接起来,如下所示:
fullname ~ ('\m' || :name || '\M')
如果:name
param等于STOCK
这会产生以下内容:
fullname ~ '\mSTOCK\M'