为啥这个查询结果会出现时间

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';

【讨论】:

以上是关于为啥这个查询结果会出现时间的主要内容,如果未能解决你的问题,请参考以下文章

为啥 SQL 结果中会出现重复值

为啥这个 sql 查询不能准确传递结果?

pgAdmin III 为啥查询结果会缩短?

为啥sql查询结果会打印出不需要的字符?

查询给出错误的结果。知道为啥会这样吗?

为啥这个 PHP MongoDB 查询即使有结果也不返回任何结果?