将朱利安日期格式化为常规日期后出错

Error after formatting julian date to regular dates

所以我有以下表达式转换儒略日期(格式为 yyyy### 的 AS400 日期与 #= 日历号天,即 2020010 = 2020 1 月 10 日,010 是第十个日历日):

iif([JulianDateTable1]='',format(CONVERT(date,DATEADD(DAY,RIGHT([JulianDateTable2],3)-1,CONVERT(datetime,LEFT([JulianDateTable2],4)))),'YYYYMMDD'), format(CONVERT(date,DATEADD(DAY,RIGHT([JulianDateTable3],3)-1,CONVERT(datetime,LEFT([JulianDateTable3],4)))),'YYYYMMDD')) AS agreementdate

当我 运行 这样做时,我收到以下错误:

Conversion failed when converting date and/or time from character string

不确定这是否与我正在尝试 'YYYYMMDD' 的日期格式有关,但我也尝试过 'MMddyy' 并且遇到了同样的错误。

提前致谢!

您可以使用日期算法将此输入转换为正确的日期数据类型。如果儒略日期存储为字符串:

dateadd(
    day, 
    convert(int, right(JulianDateTable2, 3)) - 1, 
    datefromparts(left(JulianDateTable2, 4), 1, 1)
)

如果是整数值:

dateadd(
    day, 
    JulianDateTable2 % 1000 - 1, 
    datefromparts(JulianDateTable2 / 1000, 1, 1)
)

Demo on DB Fiddle