数据库列(VARCHAR2
数据类型)将日期/时间存储为 13 位(毫秒)unixtimestamp 格式。现在,当我想将该列与 Oracle 日期(有问题)进行比较时,抛出的错误为“无效数字”
两种方法都试过了
- 将 13 位数字转换为日期并与相关日期进行比较,如下所示。表达式似乎有效,因为它们在选择查询中打印,但如果我包含在 where 部分中,它会抛出“无效数字”
这里的“值”是数据类型的第 13 位 unixtimestamp 列 VARCHAR2
。
select
TO_DATE('1970-01-01', 'YYYY-MM-DD') + value/86400000,
TO_DATE('2014-04-21', 'YYYY-MM-DD')
from dummytable
-- where and TO_DATE('1970-01-01', 'YYYY-MM-DD') + value/86400000 > TO_DATE('2014-04-21', 'YYYY-MM-DD')
- 将相关日期转换为 13 位 unixtimestamp 并与数据库列进行比较。表达式似乎有效,因为它们在选择查询中打印,但如果我包含在 where 部分中,则会抛出“无效数字”
.
select
value,
(to_date('2013-04-21', 'YYYY-MM-DD') - to_date('1970-01-01', 'YYYY-MM-DD')) * (1000*24*60*60)
from dummytable
-- where value > ((to_date('2013-04-21', 'YYYY-MM-DD') - to_date('1970-01-01', 'YYYY-MM-DD')) * (1000*24*60*60))
任何指针?提前致谢。
[编辑- 1 天后] 我现在看到了问题。“值”列有一些非数字数据(其他行)。但我有另一列说字段,其中总是 field='date' 返回值作为 13 位时间戳。现在我认为当 'where' 条件执行时,虽然 field='date' 在条件中,但它仍在验证 'value' 的其他非数字值。有没有办法避免这种情况?