暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle数据库中包含日期的JSON

ASKTOM 2019-07-12
413

问题描述

我有一个SQL查询作为:

With jtable as (:inp)
Select * from table t,jtable where t.DATE = jtable.DATE


这里
inp 
是一个dataframe,我通过转换为json和eveything来照顾,它工作得很好,除非它必须处理datetime对象。
所以,如果我有dataframe与datetime对象,我把它推到json,我得到它在posix,因此日期在oracle仍然是datetime不会等于它。

当我在dataframe中看到datetime时,我尝试将其更改为字符串为 _date (% y-% m-% d,YYYY-MM-DD),但它的非数字,因此绑定不起作用。

有什么办法可以绕过它,这样我就不必更改我的sql查询 (sql查询可以更改为TO_DATE,我可以简单地将datettime作为字符串传递)


jason-data == [{"TEST_DATE"16163612361}]
当dataframe具有TEST_DATE = pd.timestamp(2019、6、28) 或其他内容时。有什么办法可以解决吗?

专家解答

如果您使用的是12c,则可以使用JSON * 函数提取属性。

有了这些,数据库可以隐式地值到日期,前提是文档将日期格式化为ISO 8601标准。

例如:

with rws as (
  select '{
  "dates" : [
    "2019-07-15",
    "15-JUL-2019",
    "2019-07-15 02:11:27 PM",
    "2019-07-15 14:11:27",
    "2019-07-15T14:11:27",
    "2019-07-15T14:11:27Z",
    "2019-07-15T14:11:27+00:00"
  ]
}' doc
  from   dual
)
  select j.*
  from   rws, json_table (
    doc, '$'
    columns 
    nested path '$.dates[*]' 
    columns (
      dt_str varchar2 path '$',
      dt_dt  date path '$' null on error
    )
  ) j;
  
DT_STR                       DT_DT                  
2019-07-15                   15-JUL-2019 00:00:00    
15-JUL-2019                                    
2019-07-15 02:11:27 PM                         
2019-07-15 14:11:27                            
2019-07-15T14:11:27          15-JUL-2019 00:00:00    
2019-07-15T14:11:27Z         15-JUL-2019 00:00:00    
2019-07-15T14:11:27+00:00    15-JUL-2019 00:00:00


因此,如果你的JSON包含任何其他格式的日期,你必须to_date的值。

如果你在11g上,你将不得不以其他方式解析你的JSON (例如使用APEX_JSON包)。但你几乎肯定必须显式转换值以使它们成为日期。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论