如何从Oracle中的日期时间戳删除日期?

时间:2019-02-27 09:42:05

标签: sql oracle

非常快速的问题,如果我有一个字段,例如closed_date,它有一个日期时间,即

01-JAN-19 09.00.00.000000000

我只想看看每天上午09:00至10:00之间关闭的案件,语法是什么?我该如何在时间上删节,只检查每天上午9点至10点之间关闭的案件?

非常感谢

4 个答案:

答案 0 :(得分:2)

您可以单独查看小时部分;当有时间戳时,您可以提取小时数:

where extract(hour from closed_date) = 9

将在时间为09:00:00或之后以及之前(不包括)10:00:00的行中查找行。


通常,当在“ 9到10”之间查看数据时,您实际上并不想包含上限,因为如果您也在查看“ 10到11”之间的数据,那么恰好是10两者中都包含:00:00,这可能不是预期的。因此,日期/时间比较通常使用>=<而不是between;您还可以使用字符串比较来做到这一点,您可以考虑将其比较清楚:

where to_char(closed_date, 'HH24:MI:SS') >= '09:00:00'
and to_char(closed_date, 'HH24:MI:SS') < '10:00:00'

或更简单

where to_char(closed_date, 'HH24') >= '09'
and to_char(closed_date, 'HH24') < '10'

在这种情况下,因为它是一个小时,所以与:

where to_char(closed_date, 'HH24') = '09'

但是随后您还是只看小时部分,将其提取为数字会更简化(IMO)。

答案 1 :(得分:1)

您似乎正在寻找根据小时列过滤时间戳列的条件。有多种方法可以从时间戳中提取日期部分,这是一种使用TO_CHAR的解决方案:

TO_CHAR(closed_date, 'hh24') = '09'

这将与时间大于或等于9 AM并且严格小于10 AM的时间戳匹配。

答案 2 :(得分:0)

您可以使用oracle的提取功能

SELECT EXTRACT(HOUR FROM timestamp_col_value) AS CURRENT_HOUR
FROM DUAL;

请注意,提取功能仅适用于MONTH / DAY / HOUR和日期类型的某些组合。 See here for more details.

如果要从日期时间中提取一个小时,则需要先将其转换为时间戳,即

SELECT EXTRACT(HOUR FROM CAST(SYSDATE AS TIMESTAMP)) AS CURRENT_HOUR 
FROM DUAL;

答案 3 :(得分:-1)

select regexp_Replace('01-JAN-19 09.00.00.000000000','\d+-\w+-\d+ ') from dual

但是,如果您想在几个小时之间进行搜索,请尝试EXTRACT,例如:

SELECT *
FROM   your_table
WHERE  to_char(your_column,
               'yyyy-mm-dd hh24:mi:ss.ff a.m.',
               'nls_date_language=american') in (9,10)

更新的答案。如果没有nls_Date_language参数,则9点钟的时间也可能是9.pm,也就是21。

相关问题