我想在名为UPDATE_TIME
的表中选择名为generic
的列中时间戳小于一周的所有行。从之前的问题我开发了这个脚本:
select * from generic where 'UPDATE_TIME' < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 WEEK))
但是这给了我这个错误:
ORA-00907: missing right parenthesis
00907. 00000 - "missing right parenthesis"
*Cause:
*Action:
Error at Line: 1 Column: 92
我做错了什么?
答案 0 :(得分:2)
select *
from generic
where timestamp '1970-01-01 00:00:00' + numtodsinterval(update_time,'SECOND') > current_timestamp - interval '7' day
Oracle中没有unix_timestamp()
。这需要使用:
timestamp '1970-01-01 00:00:00' + <number of seconds in epoch>
添加必须转换为interval
类型的秒数。那是什么
numtodsinterval(update_time,'SECOND')
正在做
date_sub
now()
'UPDATE_TIME'
是字符串文字而非列名如果update_time
是date
或timestamp
列,则无需进行整个转换:
select *
from generic
where update_time > current_timestamp - interval '7' day