Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 间隔日到秒数据类型:查找大于1分钟的值_Sql_Oracle_Oracle10g_Timestamp_Compare - Fatal编程技术网

Sql 间隔日到秒数据类型:查找大于1分钟的值

Sql 间隔日到秒数据类型:查找大于1分钟的值,sql,oracle,oracle10g,timestamp,compare,Sql,Oracle,Oracle10g,Timestamp,Compare,创建的时间和结束的时间是VARCHAR字段 SQL语句 SELECT time_created, time_ended, TO_TIMESTAMP (time_ended, 'YYYY/MM/DD-HH24:MI:SS:FF9') - TO_TIMESTAMP (time_created, 'YYYY/MM/DD-HH24:MI:SS:FF9') FROM trans 输出 2012/10/28-18:46:13.855 2012/10/28-18:47:43.357 +

创建的时间和结束的时间是VARCHAR字段

SQL语句

SELECT time_created,
   time_ended,
   TO_TIMESTAMP (time_ended, 'YYYY/MM/DD-HH24:MI:SS:FF9')
   - TO_TIMESTAMP (time_created, 'YYYY/MM/DD-HH24:MI:SS:FF9')
  FROM trans
输出

2012/10/28-18:46:13.855 2012/10/28-18:47:43.357 +00 00:01:29.502000
2012/10/20-22:40:10.363 2012/10/20-22:40:35.265 +00 00:00:24.902000
2012/10/20-22:40:08.951 2012/10/20-22:40:24.717 +00 00:00:15.766000
2012/10/20-22:40:09.454 2012/10/20-22:40:28.217 +00 00:00:18.763000
2012/10/20-22:40:09.912 2012/10/20-22:40:31.767 +00 00:00:21.855000
2012/10/22-10:11:29.360 2012/10/22-10:14:08.692 +00 00:02:39.332000
2012/10/22-10:11:08.335 2012/10/22-10:11:43.781 +00 00:00:35.446000
2012/10/20-22:40:07.900 2012/10/20-22:40:17.508 +00 00:00:09.608000
2012/10/20-22:40:08.469 2012/10/20-22:40:21.144 +00 00:00:12.675000
2012/10/22-11:00:42.355 2012/10/22-11:01:41.706 +00 00:00:59.351000
2012/10/22-10:11:09.268 2012/10/22-10:11:54.185 +00 00:00:44.917000
2012/10/22-10:11:13.072 2012/10/22-10:12:21.365 +00 00:01:08.293000
我希望where子句只显示大于1分钟的记录


我在Sun Solaris上使用Oracle Database 10g。

如果您别名差异列,您可以将其包装在外部select中,只需添加一个
where
子句:

SELECT * FROM (
    SELECT time_created,
        time_ended,
        TO_TIMESTAMP (time_ended, 'YYYY/MM/DD-HH24:MI:SS:FF9')
            - TO_TIMESTAMP (time_created, 'YYYY/MM/DD-HH24:MI:SS:FF9') AS diff
    FROM trans
)
WHERE diff > INTERVAL '1' MINUTE
在CTE中填充与输出匹配的虚拟数据:

with trans as (
select '2012/10/28-18:46:13.855' time_created,
    '2012/10/28-18:47:43.357' time_ended from dual
union all select '2012/10/20-22:40:10.363', '2012/10/20-22:40:35.265' from dual
union all select '2012/10/20-22:40:08.951', '2012/10/20-22:40:24.717' from dual
union all select '2012/10/20-22:40:09.454', '2012/10/20-22:40:28.217' from dual
union all select '2012/10/20-22:40:09.912', '2012/10/20-22:40:31.767' from dual
union all select '2012/10/22-10:11:29.360', '2012/10/22-10:14:08.692' from dual
union all select '2012/10/22-10:11:08.335', '2012/10/22-10:11:43.781' from dual
union all select '2012/10/20-22:40:07.900', '2012/10/20-22:40:17.508' from dual
union all select '2012/10/20-22:40:08.469', '2012/10/20-22:40:21.144' from dual
union all select '2012/10/22-11:00:42.355', '2012/10/22-11:01:41.706' from dual
union all select '2012/10/22-10:11:09.268', '2012/10/22-10:11:54.185' from dual
union all select '2012/10/22-10:11:13.072', '2012/10/22-10:12:21.365' from dual
)
SELECT * FROM (
    SELECT time_created,
        time_ended,
        TO_TIMESTAMP (time_ended, 'YYYY/MM/DD-HH24:MI:SS:FF9')
            - TO_TIMESTAMP (time_created, 'YYYY/MM/DD-HH24:MI:SS:FF9') AS diff
    FROM trans
)
WHERE diff > INTERVAL '1' MINUTE

TIME_CREATED            TIME_ENDED              DIFF
----------------------- ----------------------- ------------------------------
2012/10/28-18:46:13.855 2012/10/28-18:47:43.357 +000000000 00:01:29.502000000
2012/10/22-10:11:29.360 2012/10/22-10:14:08.692 +000000000 00:02:39.332000000
2012/10/22-10:11:13.072 2012/10/22-10:12:21.365 +000000000 00:01:08.293000000

3 rows selected.

谢谢你,亚历克斯。唯一一件小事:在我看来,where子句中的别名“diff”不起作用。我需要全权指挥。正是我要找的。@fyodor78-列别名在定义的
where
子句的同一级别上不起作用;这就是为什么我放置外部
选择
,它可以使用内部(原始)查询中的
diff
值。但是把它写在一个层次上也一样好——我只是觉得这会更清楚一点。(另外……不要在
varchar2
字段中存储时间戳(或任何其他内容),始终使用正确的数据类型。这没有多大区别,但不是一个好习惯)。