繁体   English   中英

Oracle SQL强制转换字符串作为日期

[英]Oracle SQL casting string as date

这个sql怎么了?

这给了我0个结果:

Select * from DOC where CREATION_TIME > to_TIMESTAMP('01-Jan-69 11.59.16 AM','dd-Mon-YY HH12.mi.ss.FF3AM');

当我这样运行时:

Select * from DOC where CREATION_TIME > '01-JAN-69 11.59.16.000000000 AM';

我得到的结果很好。 将表架构设置为CREATION_TIME作为时间戳类型,其格式在第二个查询中可见。

这是因为,

select TO_TIMESTAMP('01-Jan-69 11.59.16 AM','dd-Mon-YY HH12.mi.ss.FF3AM') from dual

返回01.01.2069 11:59:16 (注意2069而不是1969)

要转换为正确的年份使用方式,

TO_TIMESTAMP('01-Jan-69 11.59.16 AM','dd-Mon-RR HH12.mi.ss.FF3AM')

文档中

RR datetime格式元素与YY datetime格式元素相似,但是它为在其他世纪中存储日期值提供了更大的灵活性。 RR datetime格式元素允许您仅指定年份的后两位数字来存储21世纪的20世纪日期。

如果将TO_DATE函数与YY datetime格式元素一起使用,则返回的年份始终与当前年份具有相同的前两位数字。 如果改用RR datetime格式元素,则返回值的世纪根据指定的两位数字年份和当前年份的最后两位数字而变化。

如果指定的两位数字年份是00到49,则

  • 如果当前年份的最后两位数字是00到49,则返回的年份与当前年份具有相同的前两位数字。

  • 如果当前年份的后两位数字为50到99,则返回年份的前两位数字比当前年份的前两位数字大1。

如果指定的两位数字年份是50到99,则

  • 如果当前年份的后两位数字是00到49,则返回年份的前两位数字比当前年份的前两位数字小1。

  • 如果当前年份的后两位数字是50到99,则返回的年份与当前年份具有相同的前两位数字。

假设将字符串正确地转换为时间戳,您可能会感到非常幸运。

ANSI / ISO表示时间戳文字的方式是timestamp yyyy-mm-dd[.ff] hh24:mi:ss ,例如-

select timestamp '1969-01-01 11:59:16' from dual;

select timestamp '1969-01-01 11:59:16.123' from dual;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM