Oracle 10g数据库日期转换为'yyyy-iw'问题?

时间:2013-01-09 00:10:25

标签: oracle plsql

我不确定这是一个问题还是更多的探索可能的错误或关于更好的方法来处理这个错误的问题。

我有一个使用

的汇总报告
select column1id, column2date
from table1
where to_char(column2date,'yyyy-iw') = to_char(to_date('2012-12-31','yyyy-mm-dd'),'yyyy-iw')

行:to_char(to_date('2012-12-31','yyyy-mm-dd'),'yyyy-iw')正在转换为2012-01,回到年初。

进一步挖掘我发现2012-12-31的日期既不包含在星期:2012-52也不包含在2013-01中,2012-53也没有返回任何数据......所以我不知道这里发生了什么。

1 个答案:

答案 0 :(得分:3)

https://forums.oracle.com/forums/thread.jspa?threadID=995899 Ravi Kumar 写道:你需要在格式中使用IYYY。 BluShadow 写道:...当它计算YYYY和IW时它们彼此独立,所以它不会因为你在格式掩码中包含IW而将YYYY输出减少到[2013]。它看着面具的组成部分而不是整个组合。

select to_char(to_date('2012-12-31','yyyy-mm-dd'),'iyyy-iw') from dual;

返回2013-01。

我认为你的WHERE子句应该是:

where to_char(column2date,'iyyy-iw') = to_char(to_date('2012-12-31','yyyy-mm-dd'),'iyyy-iw')