我正在使用oracle 11g并且我有正常的时间戳(starttime),它产生如下输出:
23.09.14 05:15:00,000000000
现在我想要一个像
这样的输出23.09.14 05
也可以:
23.09.14 05:00:00,000000000
但是当我使用像
这样的东西时 round(starttime, 'HH') or trunc(starttime ,'HH24')
我总是得到
23.09.14
完全没有时间。
在此处查看stackoverflow,我找到了
substr(TO_CHAR(starttime),0,LENGTH(TO_CHAR(starttime))-13)
产生正确的输出为char但是当我想对日期进行排序时它不会起作用,因为它按字母顺序排序。 (例如,1.3。,1.4,1.5 ....而不是1.3。,2.3。,3.3,......),
知道我怎么能得到一个四舍五入到整个小时的时间戳?
我将不得不在group by子句中使用该语句。完整的陈述如下:
select round(starttime, 'HH24'), sum(counter) from wmsconsolidationorderdwct group by round(starttime, 'HH24') order by round(starttime, 'HH24') desc;
所以我无法显示舍入时间并按完整时间戳排序,因为这会违反group by子句。
答案 0 :(得分:2)
这将截断到小时:
trunc(SYSTIMESTAMP) + extract(hour from SYSTIMESTAMP)/24
编辑:
我刚尝试了一下
SELECT TRUNC(SYSTIMESTAMP ,'HH24') FROM DUAL;
返回正确的结果。
答案 1 :(得分:1)
例如,
SQL> SELECT TO_CHAR(SYSTIMESTAMP, 'DD.MM.YY HH24') FROM dual;
TO_CHAR(SYS
-----------
28.05.15 15
SQL>
例如,
SQL> alter session set nls_date_format='DD-MM-YYYY HH24:MI:SS'
2 /
Session altered.
SQL> SELECT TRUNC(SYSTIMESTAMP ,'HH24') FROM DUAL
2 /
TRUNC(SYSTIMESTAMP,
-------------------
28-05-2015 15:00:00
SQL>
答案 2 :(得分:0)
如果您有时间戳对象:
select my_number from(
SELECT TO_NUMBER(TO_CHAR(TO_DATE (TO_CHAR (SYSTIMESTAMP, 'DD.MM.YY HH24:MI'),
'DD.MM.YY HH24:MI'
),'HH24')) AS my_number
FROM DUAL)
order by 1
这可以简化为:
select my_number from(
SELECT TO_NUMBER(TO_CHAR(SYSTIMESTAMP, 'HH24')) AS my_number
FROM DUAL)
order by 1