【发布时间】:2021-02-21 20:18:35
【问题描述】:
通过 datetimeoffset 列查询 SQL Server 表的正确 DateTimeFormatter 模式是什么。当我执行以下查询时,我得到了结果。我应该使用什么模式从 Java 应用程序运行相同的查询?
SELECT *
FROM
TABLE
WHERE
CreateTimestamp >= '2020-07-06 06:00:00.0000000 +00:00'
下面是我用来转换日期的java代码sn-p:
public String convertToDatabaseColumn(OffsetDateTime offsetDateTime) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd-HH.mm.ss.SSSSSS Z");
return offsetDateTime.format(formatter);
}
下面是设置参数并执行查询的sn-p
Date beginDt; // passed to the method as parameter
Date endDt; // passed to the method as parameter
OffsetDateTime beginDateTime = beginDt.toInstant().atOffset(ZoneOffset.UTC);
OffsetDateTime endDateTime = endDt.toInstant().atOffset(ZoneOffset.UTC);
params.put(BEG, convertToDatabaseColumn(beginDateTime));
params.put(END, convertToDatabaseColumn(endDateTime));
List<Map<String, Object>> newfuelList = sqlJdbcTemplate.queryForList(sqlForNewFuel, params);
我得到以下异常
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Conversion failed when converting date and/or time from character string.
【问题讨论】:
-
yyyy-MM-dd-HH.mm.ss.SSSSSS Z如果您再次检查,您会注意到在d和H之间有一个-,而不是T或' '。 -
数据库中
CreateTimestamp的数据类型是什么?你不是使用内置的timestamp with time zone数据类型吗?如果不是为什么不呢?我当然认为你应该。 (不知道它在 SQL Server 中的确切名称,但肯定有一个等价物。)
标签: java sql sql-server datetimeformatter