在Oracle Where子句中使用Timestamp数据类型搜索数据

时间:2015-12-02 08:34:50

标签: sql oracle datetime timestamp

我有表Alert_Logs,其中有2列KPI_DEF_IDTIMESTAMPTIMESTAMP列的数据类型为timestamp。我想在oracle sql where子句中使用timestamp列搜索数据。我尝试了下面的查询,但没有返回任何内容。

Select * from ALERT_LOGS WHERE KPI_DEF_ID = 1000571 and TIMESTAMP = to_timestamp('17.10.15 00:02:58','DD.MM.YY HH24:MI:SS');

2 个答案:

答案 0 :(得分:2)

  

和TIMESTAMP = to_timestamp(' 17.10.15 00:02:58',' DD.MM.YY HH24:MI:SS')

由于您的列数据类型为时间戳,因此它将包含比 datetime 更多的元素。

此外,相等条件与任何行都不匹配。您需要使用范围条件

例如,要获取时间戳在2 AM3 AM之间的所有行:

WHERE TIMESTAMP >= to_timestamp('17.10.15 00:02:00','DD.MM.YY HH24:MI:SS')
AND   TIMESTAMP <  to_timestamp('17.10.15 00:03:00','DD.MM.YY HH24:MI:SS')

使用范围条件的好处是性能 高效。使用 TO_CHAR 会抑制时间戳列上的所有常规索引。范围条件将执行索引范围扫描

答案 1 :(得分:1)

您正在尝试将时间戳与日期进行比较。时间戳也有毫秒。假设TIMESTAMP的类型为timestamp,那么这将起作用

Select * from ALERT_LOGS WHERE KPI_DEF_ID = 1000571 and to_char(TIMESTAMP, 'DD.MM.YY HH24:MI:SS') = '17.10.15 00:02:58';  

这就是时间戳的表示方式。

SQL&GT;从双重选择to_timestamp(&#39; 02.12.15 08:40:54&#39;,&#39; DD.MM.YY HH24:MI:SS&#39;);

TO_TIMESTAMP(&#39; 1508年12月2日:40:54&#39;,&#39; DD.MM.YYHH24:MI:SS&#39)

02-DEC-15 08.40.54.000000000 AM