使用过的查询如下:
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
答案 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