Как использовать NamedJdbcTemplate с регулярными выражениями Postgres - PullRequest
0 голосов
/ 25 апреля 2018

Я использую Postgres: 9.5.5 и Spring-Jdbc: 4.3.7.

Мой выбор в postgres выглядит так:

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

Что вернет true, если полное имя содержит слово «STACK».

У меня проблема с генерацией этого запроса в 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, ....);

Результирующий SQL, сгенерированный JDBC:

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

Как видите, с параметром birth_date проблем нет, но JDBC не поставил "?" символ вместо параметра ": name".

Как мне объяснить JDBC, что мой параметр ": name" окружен регулярным выражением?

Спасибо!

1 Ответ

0 голосов
/ 25 апреля 2018

'\m:name\M' Этот результат является логикой, потому что вместо этого вы используете свое регулярное выражение и параметр между двумя кавычками.

Вы можете использовать ||, чтобы объединить ваше регулярное выражение со словом, например так:

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

Если :name param равно STOCK Это приведет к примерно так:

fullname ~ '\mSTOCK\M'
...