Oracle UNPIVOT 和 SYSDATE 给出奇怪的结果
我正在尝试使用类似于以下的查询将列转置为行...
WITH
query AS
(
SELECT SYSDATE AS SomeDate,
'One' AS One,
'Two' AS Two,
'Three' AS Three,
'Four' AS Four,
'Five' AS Five
FROM dual
),
up_query AS
(
SELECT *
FROM query
UNPIVOT
(
NUM FOR DUMMY
IN
(
One AS 'One',
Two AS 'Two',
Three AS 'Three',
Four AS 'Four',
Five AS 'Five'
)
)
)
SELECT SYSDATE, b.*
FROM up_query b;
我期望 SomeDate 反映结果行的 SYSDATE... 但这就是我得到的结果:
SYSDATE SOMEDATE DUMMY NUM
09-DEC-11 09-DEC-07 One One
09-DEC-11 09-DEC-07 Two Two
09-DEC-11 09-DEC-07 Three Three
09-DEC-11 09-DEC-07 Four Four
09-DEC-11 09-DEC-07 Five Five
为什么 SOMEDATE 比 SYSDATE 早 4 年?
I am trying to transpose columns to rows using query similar to the following...
WITH
query AS
(
SELECT SYSDATE AS SomeDate,
'One' AS One,
'Two' AS Two,
'Three' AS Three,
'Four' AS Four,
'Five' AS Five
FROM dual
),
up_query AS
(
SELECT *
FROM query
UNPIVOT
(
NUM FOR DUMMY
IN
(
One AS 'One',
Two AS 'Two',
Three AS 'Three',
Four AS 'Four',
Five AS 'Five'
)
)
)
SELECT SYSDATE, b.*
FROM up_query b;
I was expecting SomeDate to reflect SYSDATE for the resulting rows...
But this is the result I am getting:
SYSDATE SOMEDATE DUMMY NUM
09-DEC-11 09-DEC-07 One One
09-DEC-11 09-DEC-07 Two Two
09-DEC-11 09-DEC-07 Three Three
09-DEC-11 09-DEC-07 Four Four
09-DEC-11 09-DEC-07 Five Five
Why is the SOMEDATE 4 years earlier than SYSDATE?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这似乎是 11.2.0.2 中的错误。我可以在 Linux x86-64, 11.2.0.2 上重现您的结果。
但是,在 11.2.0.3 上,在 Linux x86-64 上,我得到:
This appears to be a bug in 11.2.0.2. I can reproduce your results on Linux x86-64, 11.2.0.2.
But, on 11.2.0.3, on Linux x86-64, I get:
正如 Mark 在他的回答中提到的,这是至少 Oracle 11.2.0.1 和 11.2.0.2 版本中的一个错误。
但是根据这个 文章如果您遇到上述 Oracle 版本的问题,有一个解决方法,即将日期转换为 varchar 格式,然后将其转换回日期数据类型。
所以查询现在应该是:
As Mark mentioned in his answer, this is a bug in Oracle 11.2.0.1 and 11.2.0.2 versions atleast.
However as per this article there is a workaround if you are stuck with the Oracle versions mentioned above, which is to convert the date to varchar format and then convert it back to date datatype.
So the query should now be: