Java 如何将NamedJdbcTemplate与Postgres正则表达式一起使用
我正在使用Postgres:9.5.5和SpringJDBC:4.3.7 我在postgres中的选择如下所示:Java 如何将NamedJdbcTemplate与Postgres正则表达式一起使用,java,regex,postgresql,java-8,spring-jdbc,Java,Regex,Postgresql,Java 8,Spring Jdbc,我正在使用Postgres:9.5.5和SpringJDBC: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
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 = ?;
如您所见,出生日期参数没有问题,
但JDBC并没有将“?”字符而不是参数“:name”
我如何向JDBC解释我的参数“:name”被正则表达式包围
谢谢
'\m:name\m'
此结果是逻辑结果,因为您在两个引号之间使用正则表达式和参数
可以使用|
将正则表达式与单词连接起来,如下所示:
fullname ~ ('\m' || :name || '\M')
fullname ~ '\mSTOCK\M'
如果:name
param等于STOCK
这将产生如下结果:
fullname ~ ('\m' || :name || '\M')
fullname ~ '\mSTOCK\M'
谢谢,这就是答案!这几乎奏效了,我相信您还需要括号:fullname~('\m'| | |:name | |'\m')。不客气@EgorStepanov是的,这是正确的,我忘记了括号:)