在Oracle SQL中将时间戳转换为日期

Din*_*inu 17 sql oracle11g

我们如何将时间戳转换为日期?

该表具有一个字段,start_ts它是的timestamp格式:

'05/13/2016 4:58:11.123456 PM'
Run Code Online (Sandbox Code Playgroud)

我需要查询表并找到表中的最大值和最小值timestamp,但我无法.

Select max(start_ts) 
from db 
where cast(start_ts as date) = '13-may-2016'
Run Code Online (Sandbox Code Playgroud)

但查询不返回任何值.

请帮我找一个日期的最大时间戳.

Pet*_*sko 26

CAST(timestamp_expression AS DATE)
Run Code Online (Sandbox Code Playgroud)

例如,查询是: SELECT CAST(SYSTIMESTAMP AS DATE) FROM dual;

  • 将数据转换为与常量进行比较(例如“cast(start_ts as date) = '13-may-2016'”)的性能非常差,因为它会影响对刚刚转换的列上的索引的访问,除非您构建基于函数索引并在查询中使用相同的函数。研究“sargable”。 (2认同)

Fel*_*tan 9

尝试使用TRUNCTO_DATE不是

WHERE
    TRUNC(start_ts) = TO_DATE('2016-05-13', 'YYYY-MM-DD')
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用>=<不是在start_ts列中使用函数:

WHERE
   start_ts >= TO_DATE('2016-05-13', 'YYYY-MM-DD')
   AND start_ts < TO_DATE('2016-05-14', 'YYYY-MM-DD')
Run Code Online (Sandbox Code Playgroud)


the*_*Guy 6

选择时使用此格式

to_char(systimestamp,'DD-MON-YYYY')
Run Code Online (Sandbox Code Playgroud)

例如:

从dual中选择to_char(systimestamp,'DD-MON-YYYY');


Use*_*ady 5

如果数据类型是时间戳,则可见格式无关紧要。

您应该避免将数据转换为日期或使用 to_char。而是使用 TO_TIMESTAMP() 将时间戳数据与时间戳值进行比较

WHERE start_ts >= TO_TIMESTAMP('2016-05-13', 'YYYY-MM-DD')
   AND start_ts < TO_TIMESTAMP('2016-05-14', 'YYYY-MM-DD')
Run Code Online (Sandbox Code Playgroud)