【问题标题】:Error after formatting julian date to regular dates将朱利安日期格式化为常规日期后出错
【发布时间】:2020-09-09 21:16:21
【问题描述】:

所以我有以下表达式来转换儒略日期(格式为 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

当我运行它时,我得到以下错误:

从字符转换日期和/或时间时转换失败 字符串

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

提前致谢!

【问题讨论】:

  • 问题编辑器中有一个代码格式选项...它将使您的问题更易于阅读。 blobkquote 选项非常适合显示错误。
  • 感谢您让我知道这两件事!对这个网站来说还是比较新的,所以绝对为任何错误道歉。现在将解决这两个问题。

标签: sql sql-server string datetime julian-date


【解决方案1】:

您可以使用日期算术将此输入转换为适当的日期数据类型。如果朱利安日期存储为字符串:

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

【讨论】:

  • 所以这似乎有效,直到我需要引用 select 语句中的表达式并抛出此错误“无法构造数据类型日期,某些参数的值无效”开始思考问题在于数据本身
猜你喜欢
  • 2014-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多