Oracle 查询从儒略值转换为带时间的日期

Jac*_*ack 2 oracle timestamp julian-date

我必须随时间从 Julian 值转换为常规日期。

Select to_char(to_date(2455198, 'J'), 'DD-MM-YYYY HH:mm:ss') from dual;
Run Code Online (Sandbox Code Playgroud)

此查询有效,结果为 01-01-2010 12:00:00

Select to_char(to_date(2455197.75001, 'J'), 'DD-MM-YYYY HH:mm:ss') from dual;
Run Code Online (Sandbox Code Playgroud)

上面的查询不起作用并出现此错误:

ORA:01830: 日期格式图片在转换整个输入字符串之前结束

Julian 值:2455197.75001和等效日期值是:1-January-2010 06:00:01

Ale*_*ole 5

正如@Chris 所说,J 需要一个整数,以便您可以使用floortrunc获取它,并将小数部分用作部分天数(并添加另外半天,正如@Chris 在评论中指出的那样,以考虑 Julian 天数中午开始):

Select to_char(
    to_date(floor(2455197.75001), 'J')
      + mod(2455197.75001, 1)
      + 0.5,
  'DD-MM-YYYY HH24:mi:ss')
from dual;
Run Code Online (Sandbox Code Playgroud)

得到:

01-01-2010 06:00:01
Run Code Online (Sandbox Code Playgroud)

请注意,我更改HHHH24,第二个mm更改mi为分钟。

数据库<>小提琴