oracle datetime 转换成 date,将XSD日期xs:dateTime转换为Oracle Date

Oracle日期没有时区信息.您需要使用TIMESTAMP数据类型.

它的工作原理如下:

SQL> desc tz

Name Null? Type

----------------------------------------- -------- ----------------------------

ID NUMBER

TS TIMESTAMP(6) WITH TIME ZONE

TNOW TIMESTAMP(6) WITH TIME ZONE

SQL> insert into tz

2 values (1

3 , to_timestamp_tz('2002-10-10 12:00:00-05:00'

4 , 'YYYY-MM-DD HH24:MI:SSTZH:TZM')

5 , systimestamp)

6 /

1 row created.

SQL> select * from tz

2 /

ID

----------

TS

---------------------------------------------------------------------------

TNOW

---------------------------------------------------------------------------

1

10-OCT-02 12.00.00.000000 -05:00

23-AUG-10 17.37.06.502000 +01:00

SQL>

注意,XSD表示法中存在T的棘手问题.这会引发ORA-01858异常,因为它不是Oracle中的有效格式.我确信有一个解决方法,但它目前逃脱了我.

好吧,一个解决方法是应用SUBSTR()函数sto拆分打开时间戳的两个部分,如Bob所示.但应该有一种更优雅的方式.

它可能不符合“优雅”的条件,但因为它是一个字符串,我们可以使用替换函数来摆脱恼人的T:

SQL> insert into tz

2 values (2

3 , to_timestamp_tz(translate('2003-10-10T12:00:00-05:00', 'T', ' ')

4 , 'YYYY-MM-DD HH24:MI:SSTZH:TZM')

5 , systimestamp)

6 /

1 row created.

SQL> select * from tz

2 /

ID

----------

TS

---------------------------------------------------------------------------

TNOW

---------------------------------------------------------------------------

1

10-OCT-02 12.00.00.000000 -05:00

23-AUG-10 17.37.06.502000 +01:00

2

10-OCT-03 12.00.00.000000 -05:00

23-AUG-10 17.53.37.113000 +01:00

SQL>

但是考虑到Oracle已经为XMLDB付出的所有努力,没有一个更整洁的解决方案是相当恼人的.

“I dont understand how you get

-05:00.”

在我的原始样本中,我使用格式掩码’YYYY-MM-DD HH24:MI:SS-TZH:TZM’.这将时区中的 – 解释为分隔符而不是减号.因此它于05:00返回.我已经更正了我的代码示例以删除最后一个破折号.现在时区正确呈现为-05:00.对不起任何困惑.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值