如何在开始日期和完成日期差异大于14的表格中选择某人姓名

时间:2014-12-13 10:06:26

标签: sql oracle select datediff

使用过的查询如下:

select name (select(to_date(finish, 'dd.mm.yyyy') - to_date(a, 'dd.mm.yyyy')) diff_hours from x)
where diff_hours> 14;

ıt给出错误:

ORA-00936: missing expression : select name (select(to_date(finish, 'dd.mm.yyyy') - to_date(a, 'dd.mm.yyyy')) diff_hours from x) where diff_hours> 14

5 个答案:

答案 0 :(得分:1)

在我看来,您在from之后错过了name

 select name from (select(to_date(finish, 'dd.mm.yyyy') - to_date(a, 'dd.mm.yyyy')) diff_hours from x) where diff_hours> 14;

答案 1 :(得分:0)

尝试以下查询:

SELECT name
FROM x
WHERE (TO_DATE(finish, 'dd.mm.yyyy') - TO_DATE(a, 'dd.mm.yyyy')) > 14;

答案 2 :(得分:0)

您不能在定义它的同一级别使用别名。一种方法是重复表达式,另一种方法是使用子查询。使用子查询时,子查询会进入from子句:

select t.name, t.diff_hours
from (select name, (to_date(finish, 'dd.mm.yyyy') - to_date(a, 'dd.mm.yyyy'))*24 as diff_hours
      from x
     ) t
where diff_hours > 14;

此外,两个日期之间的差异是天数。要获得数小时的差异,您需要乘以24。

答案 3 :(得分:0)

正如已经多次说过的那样,你不能在定义它的查询的where子句中使用别名。使用子查询来解决该问题是一种常见的解决方案。另一种解决方案是使用CTE。对于这样一个简单的查询,这可能只是一个品味问题。对于更复杂的问题,这可能有助于提高可读性:

with cte as
  (select name,
          (to_date(finish, 'dd.mm.yyyy') - to_date(a, 'dd.mm.yyyy'))*24 diff_hours
          from x
  )
select * from cte where diff_hours > 14;

答案 4 :(得分:-1)

SELECT名称 来自table WHERE DATEDIFF(end_date,start_date)* 24> 14