2

有点卡在这里。假设我运行以下 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),将其与 SLA 时间结合起来的 HH:MI,将其与 :SS 的 ':00' 结合,将整个事物转换为日期,然后在返回的每一行的结果可憎和完成时间之间进行比较。如果完成时间比我的组合和转换豪华更大/更新/晚,则返回特定的内容,而不是返回类似“一切正常”的内容。不确定这是否有意义,但总而言之,我想得到一些可以用来与另一种 DATETIME 类型进行比较的东西,所以我认为我还需要以某种方式将 SLA 时间转换为 DATETIME 类型。

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

4

2 回答 2

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
于 2012-11-08T11:42:51.577 回答
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
于 2012-11-08T11:43:52.887 回答