为啥这个查询结果会出现时间
Posted
技术标签:
【中文标题】为啥这个查询结果会出现时间【英文标题】:Why does the time appear in this query result为什么这个查询结果会出现时间 【发布时间】:2019-11-28 16:36:57 【问题描述】:在下面的代码中,我在查询中使用了trunc(date)
,因为我只对日期感兴趣,而不是时间。
但是,我打印了这个:
[2019-11-28 00:00:00=653]
而不是[2019-11-28=653]
。
代码如下:
Map<String, Integer> map = jdbcTemplate.query("select trunc(closing_date) as closing_date, count(*) as total from some_table group by closing_date", new ResultSetExtractor<Map>()
@Override
public Map extractData(ResultSet rs)
HashMap<String, Integer> mapRet = new HashMap<>();
while(rs.next())
mapRet.put(rs.getString("closing_date"), rs.getInt("total"));
return mapRet;
);
LOGGER.info(Arrays.toString(map.entrySet().toArray()));
为什么?
【问题讨论】:
你能告诉我们你的关闭日期列值的例子吗?谢谢! 另外请告知我们您的日期格式。您可以通过以下查询找到答案:select * from V$NLS_PARAMETERS where parameter = 'NLS_DATE_FORMAT';
不太清楚,但您也可以在查询中对字符串进行格式化,应该可以。
【参考方案1】:
TRUNC()
删除日期的时间元素,因为它将时间向下舍入到午夜(与trunc(23.42)
给我们23
的方式相同)。但是 Oracle DATE 实际上仍然是一个 datetime ,因此需要显示一个时间元素,除非我们使用仅显示日期元素的格式掩码。
【讨论】:
【参考方案2】:Trunc 函数只截断日期。它不会改变显示格式。
您可以根据需要使用to_char(date, 'yyyy-mm-dd')
显示日期。
干杯!!
【讨论】:
【参考方案3】:在从Java连接到Oracle数据库时,如果你可以通过下面的Alter session命令,那么它可以解决你的问题。
更改会话集 NLS_DATE_FORMAT='DD-MON-YYYY';
【讨论】:
以上是关于为啥这个查询结果会出现时间的主要内容,如果未能解决你的问题,请参考以下文章