查询以更改列中的日期格式

时间:2019-06-27 10:43:15

标签: oracle plsql subquery oracle-sqldeveloper

我有一个要创建的报告,但是有一个我无法解决的小问题,因为我生成的column(date)具有不同的值。我在子查询中使用它。我的问题是我可以使用一种格式来管理列的值吗?请参阅下表以供参考,

我的列(日期)包含

date_columns
2019-06-20T11:09:15.674+00:00
2019-06-20T11:09:15.674+00:00
2019-06-20T11:09:15.674+00:00
2019-06-20T11:09:15.673+00:00

现在,我的问题是它返回了我ORA-01427:单行子查询由于该2019-06-20T11:09:15.673+00:00返回了多行。我可以做一种使其看起来像2019-06-20T11:09:15的格式吗?

我尝试了以下查询,但没有任何变化。它返回了我同样的错误。

select distinct to_date(substr(dar.last_update_date,1,15),'YYYY-MM-DD HH:MI:SS')

select distinct to_date(dar.last_update_date,1,15,'YYYY-MM-DD HH:MI:SS')

谢谢!

1 个答案:

答案 0 :(得分:2)

2019-06-20T11:09:15.673+00:00the official XML representation中似乎是日期时间的字符串。我们可以使用to_timestamp_tz()将其转换为实际时间戳,然后将时间戳转换为日期:

select cast(
          to_timestamp_tz('2019-06-20T11:09:15.673+00:00','YYYY-MM-DD"T"HH24:MI:SS:FFTZH:TZM') 
        as date)
from dual;

但是,我不确定这将如何解决ORA-01427: single-row subquery returns more than one row错误。当我们使用像这样的子查询时会发生此异常……

where empno = ( select empno 
                from emp
                where deptno = 30
                and sal > 2300 )

…,并且子查询返回多个行,因为WHERE子句太松懈。解决方案是修复子查询的WHERE子句,使其仅返回一行(或在不可能的情况下,在子查询的投影中使用distinct)。