如何使用to_date函数转换复杂的sysdate +其他内容?

时间:2012-11-08 11:27:31

标签: sql oracle to-date to-char

有点卡在这里。假设我运行以下SQL查询:

select to_char(sysdate, 'DD/MON/YY') || ' 15:32:00' from dual;

结果给了我这个:

08/NOV/12 15:32:00

现在我想取得结果并在to_date函数中使用它(长篇故事为什么,但我将在一秒内详细介绍):

select to_date((to_char(sysdate, 'DD/MON/YY') || ' 15:32:00'), 'DD/MON/YY HH24:MI:SS') from dual;

我期待结果与前一个结果相同,但事实并非如此。相反,它给了我这个:

08/NOV/12

问题是:有没有办法可以在to_date中使用to_char(sysdate,'DD / MON / YY')和HH24:MI:SS的任何组合串联?

可能有或没有任何额外用途的其他细节: 我需要这样做的原因是因为我提供了一个具有SLA时间表的查询。格式只是HH24中的一个时间:MI,但它不是DATETIME类型(我怀疑它是VARCHAR,但不能确定,因为它可能是某种我无法解剖的视图或功能。部分原因是我由于我的数据库用户,我不知道如何和部分对我没有必要的访问权。

编辑:在再次阅读上述内容时,我意识到我遗漏了一些额外的细节(尽管这与我的问题无关): 我想采取今天的日期(DD / MON / YY),将其与HH:MI的SLA时间相结合,将其与':00'结合使用:SS,将整个事物转换为日期,然后进行比较由此产生的憎恶和返回的每一行的完成时间。如果完成时间比我的组合 - 转换 - 豪华更大/更新/更晚,那么返回特定的东西,而不是返回“全部正常”之类的东西。不确定这是否有意义,但总的来说,我想得到一些我可以用来与另一个DATETIME类型进行比较的东西,所以我认为我需要以某种方式将SLA时间转换为DATETIME类型。

对此的任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

您看到的输出将转换为char格式。这由NLS_DATE_FORMAT设置决定。在内部,日期仍将与时间格式相关联。这样做是为了看到它:

SQL> select sysdate from dual;

SYSDATE
---------
08-NOV-12

SQL> alter session set nls_date_format='dd/MON/yy hh24:mi:ss';

Session altered.

SQL> select sysdate from dual;

SYSDATE
------------------
08/NOV/12 11:41:46

答案 1 :(得分:2)

您的默认日期格式为'DD / MM / YY'如果您想显示时间组件,您必须使用正确的日期格式:

select to_char(to_date((to_char(sysdate, 'DD/MON/YY') || ' 15:32:00'), 'DD/MON/YY HH24:MI:SS'),'DD/MM/YY HH24:MI:SS') from dual