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



我有一个Alert_Logs表,其中有两列KPI_DEF_IDTIMESTAMPTIMESTAMP列的数据类型为timestamp。我想在oraclesqlwhere子句中使用时间戳列搜索数据。我尝试了下面的查询,但没有返回任何结果。

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

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

由于您的列数据类型是timestamp,因此它将具有比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将抑制时间戳列上的任何常规索引。范围条件将执行索引范围扫描

您正在尝试比较时间戳和日期。时间戳也有毫秒。假设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>从dual中选择时间戳('02.12.15 08:40:54','DD.MM.YY HH24:MI:SS');

TO_TIMESTAMP('02.12.1508:40:54','DD.MM.YYHH24:MI:SS')

2015年12月2日上午08.40.54.000000000

最新更新