Для приведения строки к нужному типу в postgres достаточно после строкового литерала поставить два двоеточия и указать тип данных, к которому следует привести строку. Примеры:
Приведу код на java в качестве иллюстрации этого подхода.
Объект fromDate - это обычная строка, которая приходит от клиента, например, из браузера. В этой строке содержится дата в текстовом представлении. Нам нужно к исходному sql-запросу добавить соответствующее условие. Но чтобы избежать sql-инъекций, формируем параметризованный запрос (PreparedStatement). Вместо знака вопроса будет подставлено нужное нам значение. А в качестве этого значения устанавливаем строку fromDate.
Конечно, данный подход не идеален. Хотя бы потому что здесь приходится генерить запрос к БД вручную. Для подобных целей лучше использовать ORM (например, Hibernate). Но если использовать ORM не представляется возможным, то преобразование строки к нужному типу в postgres значительно облегчает эту задачу.
'123'::integerЭто очень полезное свойство можно использовать при динамической генерации условий запроса совместно с параметризованными запросами jdbc. А в качестве значений параметров для унификации всегда хранить только строки.
'2013-01-11'::timestamp
Приведу код на java в качестве иллюстрации этого подхода.
// здесь указан запрос на выборку из БД всех записей
// (то есть не задано никаких дополнительных условий)
StringBuilder whereExpressionBuilder = new StringBuilder("select * from messages m");
// обработка условий, заданных пользователем
if (fromDate != null && !fromDate.isEmpty()) {
whereExpressionBuilder.append(" where m.created >= ?::timestamp ");
}
PreparedStatement ps = connection.prepareStatement(whereExpressionBuilder.toString());
ps.setString(1, fromDate);
Объект fromDate - это обычная строка, которая приходит от клиента, например, из браузера. В этой строке содержится дата в текстовом представлении. Нам нужно к исходному sql-запросу добавить соответствующее условие. Но чтобы избежать sql-инъекций, формируем параметризованный запрос (PreparedStatement). Вместо знака вопроса будет подставлено нужное нам значение. А в качестве этого значения устанавливаем строку fromDate.
Конечно, данный подход не идеален. Хотя бы потому что здесь приходится генерить запрос к БД вручную. Для подобных целей лучше использовать ORM (например, Hibernate). Но если использовать ORM не представляется возможным, то преобразование строки к нужному типу в postgres значительно облегчает эту задачу.