如何使用 to_date 函数转换复杂的 sysdate + 其他内容?
Posted
技术标签:
【中文标题】如何使用 to_date 函数转换复杂的 sysdate + 其他内容?【英文标题】:How can I convert a complex sysdate + something else with a to_date function? 【发布时间】:2012-11-08 11:27:31 【问题描述】:有点卡在这里。假设我运行以下 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 时间结合起来,将其与 :SS 的 ':00' 结合起来,将整个日期转换为日期,然后在结果令人憎恶和返回的每一行的完成时间。如果完成时间比我的组合和转换豪华更大/更新/晚,则返回特定的内容,而不是返回类似“一切正常”的内容。不确定这是否有意义,但总而言之,我想得到一些可以用来与另一种 DATETIME 类型进行比较的东西,所以我认为我还需要以某种方式将 SLA 时间转换为 DATETIME 类型。
对此的任何帮助将不胜感激。
【问题讨论】:
你用什么客户端来运行这个?它应该可以工作,demo, 嗨,Ben,使用 Oracle SQL Developer 对其进行测试。我很确定它应该可以正常工作,但由于某些奇怪的原因,它似乎只是在 to_char(sysdate, 'DD/MON/YY') 之后扔掉了一点。编辑:SQL Developer v. 2.1 sql developer NLS 设置位于工具>首选项>数据库>NLS 参数下。请参阅下面的答案 【参考方案1】:您看到的输出被转换为字符格式。这是由 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
【讨论】:
DazzaL,你太棒了! :) 我没有运行 alter session,但基于此,我对 SQL Developer 的设置进行了挖掘,最终进入 Tools > Preferences > Database > NLS > Date format 并将其从 DD/MON/RR 更改为 DD/MON /RR HH24:MI:SS。在那之后重新运行我的查询,你瞧,它现在就像一个魅力。感谢您的快速帮助,非常感谢。【参考方案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
【讨论】:
谢谢你,我没有想到要抛出另一个 to_char 函数。在您和 DazzaL 的回答之后,现在对我来说更有意义了,似乎我设法将它转换为 DATETIME 类型就好了,但它并没有显示我想要的,即使它在那里。以上是关于如何使用 to_date 函数转换复杂的 sysdate + 其他内容?的主要内容,如果未能解决你的问题,请参考以下文章
oracle中to_date详细用法示例(oracle日期格式转换)