我有表Alert_Logs,其中有2列KPI_DEF_ID
和TIMESTAMP
。 TIMESTAMP
列的数据类型为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');
答案 0 :(得分:2)
和TIMESTAMP = to_timestamp(' 17.10.15 00:02:58',' DD.MM.YY HH24:MI:SS')
由于您的列数据类型为时间戳,因此它将包含比 datetime 更多的元素。
此外,相等条件与任何行都不匹配。您需要使用范围条件。
例如,要获取时间戳在2 AM
和3 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;);
02-DEC-15 08.40.54.000000000 AM