减去日期ORA 01722

时间:2020-02-26 17:54:37

标签: sql oracle

我正尝试减去两个日期并获得一个integer值作为回报。我似乎遇到了障碍,因为两个日期之一为null,随后返回错误。有什么解决方法吗,如果review_date为空,我渴望得到ageing_date。

select to_date(sysdate)aging_date,to_char(review_date,'MM/DD/YYYY')review_date
from mytable    

aging_date           review_date
2/26/2020             01/05/2020
2/26/2020             05/15/2018
2/26/2020                
2/26/2020             03/14/2019
2/26/2020             12/17/2019

select aging_date,review_date,(aging_date - review_date)actual_date from
(
select 
to_date(sysdate)aging_date,to_char(review_date,'MM/DD/YYYY')review_date, 
(aging_date - review_date)actual_date from mytable
)new

ORA 01722: Invalid Number

3 个答案:

答案 0 :(得分:2)

您必须转换#======================================================================== #=== Update these variables for your resources. === #======================================================================== ResourceGroupName=SignalRTestResources SignalRServiceResource=mySignalRresourcename WebAppName=myWebAppName # Get the SignalR primary connection string primaryConnectionString=$(az signalr key list --name $SignalRServiceResource \ --resource-group $ResourceGroupName --query primaryConnectionString -o tsv) #Add an app setting to the web app for the SignalR connection az webapp config appsettings set --name $WebAppName \ --resource-group $ResourceGroupName \ --settings "Azure__SignalR__ConnectionString=$primaryConnectionString" 列中的varchar2列。

DATE

减去select aging_date,review_date, (aging_date - to_date(review_date,'mm/dd/yyyy')) actual_date from tab; AGING_DATE REVIEW_DAT ACTUAL_DATE ------------------- ---------- ----------- 26.02.2020 00:00:00 01/05/2020 52 26.02.2020 00:00:00 05/15/2018 652 26.02.2020 00:00:00 26.02.2020 00:00:00 03/14/2019 349 26.02.2020 00:00:00 12/17/2019 71 DATE会得到VARCHAR2

ORA-01722: invalid number

答案 1 :(得分:1)

目标是选择老化日期,审阅日期和difference = (aging_date - review_date)。查询选择aging_date和审阅日期,并针对日期差异,case语句仅在aging_datereview_date不是null时计算差异。您还可以在这里使用if - end if块代替大小写:

select 
aging_date,
review_date,
(case when aging_date is not null and review_date is not null then (aging_date - review_date) end )actual_date  
from mytable;

答案 2 :(得分:0)

尝试一下。如果没有review_date(应该从自身中减去ageing_date),则应返回零值

select aging_date,
       review_date,
       (aging_date - nvl(review_date,aging_date)) actual_date from mytable

有关NVL函数的文档。