差异日期在甲骨文

问题描述:

我写了下面的查询差异日期在甲骨文

SELECT 
    TO_CHAR(TO_DATE(data_elaborazione, 'YYYYMMDD') - 
    TO_DATE(DATA_INS_AGG_SDS, 'YYYYMMDD'))AS DateDiff 
FROM 
    dual 

我要计算两个日期之间的差别,但我得到一个错误:

ORA-00904: "DATA_INS_AGG_SDS": invalid identifier

同也为data_elaborazioneData_elaborazioneDATA_INS_AGG_SDS是包含日期为varchar

+6

'dual'没有这些列。 –

+0

@WernfriedDomscheit因为我正在使用的表的日期为字符串。不要问为什么我连我都不知道为什么。 –

+1

@dimmik,数据的存储方式与您尝试的数学无关。如果你想要一个datediff,你需要两个日期,而不是一个日期和一个字符串。 –

你所得到的错误是你引用不存在的双列原因都varchar类型。您需要从实际存在的表中选择这些列。至于日期算术,它应该返回一个数字,不需要显示TO_CHAR,除非您有一些特定的格式问题。这是一个日期算术的例子。第二个日期值具有时间分量。因此,两列由于日期算术而显示结果,第二列基本上向下舍入以获得偶数整数值的天数。

请阅读关于数据类型的评论。您应该始终使用正确数据类型的值。避免将任何日期或数字作为字符串存储在数据库中。

-- start test_data 
with some_data(begin_date, end_date) as 
    (select to_date('02/15/2017','MM/DD/YYYY'), to_date('04/03/2017 09:34:12','MM/DD/YYYY HH24:MI:SS') from dual) 
-- end test data 
select end_date - begin_date as num_days_diff_w_time, 
     FLOOR(end_date - begin_date) as num_days_diff_wo_time 
    from some_data;