在 Postgresql 中以间隔添加日期作为参数的准备语句
Prepared statement with date added by interval as parameter in Postgresql
这个有效:
String query = "select DATE '2016-03-16' + interval '7 days'";
但我想在准备好的语句中将“2016-03-16”和 7 作为参数。怎么做?
我这样试过,但没用:
String query = "select DATE ? + interval ?";
Object param[] = {"2016-03-16", "7 days"};
试试这样的东西:
select to_date(?, 'YYYY-MM-DD') + cast(? as interval)
其他选择是使用类似
的东西
select cast(? as date) + cast(? as interval)
但这取决于日期转换的当前语言环境
如果使用 Java 我会说最干净的方法是使用 org.postgresql.util.PGInterval
按如下方式设置您的查询(不要提及 'interval'):
String query = "select DATE ? + ?";
并以这种方式添加准备好的语句值:
stmt.setDate(1, java.sql.Date.valueOf("2016-03-16"));
stmt.setObject(2, new PGInterval(0, 0, 7, 0, 0, 0));
实际上,使用PGInterval
代表整个interval '7 days'
这个有效:
String query = "select DATE '2016-03-16' + interval '7 days'";
但我想在准备好的语句中将“2016-03-16”和 7 作为参数。怎么做?
我这样试过,但没用:
String query = "select DATE ? + interval ?";
Object param[] = {"2016-03-16", "7 days"};
试试这样的东西:
select to_date(?, 'YYYY-MM-DD') + cast(? as interval)
其他选择是使用类似
的东西select cast(? as date) + cast(? as interval)
但这取决于日期转换的当前语言环境
如果使用 Java 我会说最干净的方法是使用 org.postgresql.util.PGInterval
按如下方式设置您的查询(不要提及 'interval'):
String query = "select DATE ? + ?";
并以这种方式添加准备好的语句值:
stmt.setDate(1, java.sql.Date.valueOf("2016-03-16"));
stmt.setObject(2, new PGInterval(0, 0, 7, 0, 0, 0));
实际上,使用PGInterval
代表整个interval '7 days'