【问题标题】:Convert string to date in Oracle SQL在 Oracle SQL 中将字符串转换为日期
【发布时间】:2015-02-03 23:54:58
【问题描述】:

我正在尝试在 Oracle SQL 中将 string 列转换为 date

这是我的数据价值示例:

'03/12/14 11:00:00'

这是我的查询:

select to_date(A,'DD/MM/YY HH24:MI:SS')
from MyTable

这是一个输出示例:

03-DEC-14

为什么我的查询只返回日期而不返回小时?

【问题讨论】:

  • 因为日期没有小时部分?试试 TIMESTAMP,也许效果更好。
  • @jarlh: 在 Oracle date 确实有时间。
  • @a_horse_with_no_name。谢谢(你的)信息! (我不是 Oracle 用户,但我相信您已经发现了这一点!)

标签: sql oracle to-date


【解决方案1】:

假设您使用的是 SQL*Plus(或 SQL Developer),当 DATE 值被显示时,默认的 NLS_DATE_FORMAT 被应用。要验证您当前的格式,您可以运行:

select value 
from nls_session_parameters 
where parameter = 'NLS_DATE_FORMAT';

要调整它,运行:

alter session set nls_date_format = 'YYYY-MM-DD HH24:MI:SS';

那么你也应该看到时间了。

【讨论】:

    【解决方案2】:

    您正在尝试显示日期时间值。使用 TO_CHAR 和适当的 FORMAT MODEL

    例如,

    select to_char(sysdate, 'mm/dd/yyyy hh24:mi:ss') from dual;

    DATE 包含日期和时间部分。您只需要确保使用适当的格式模型来显示它。否则,您最终得到的格式取决于您的特定于语言环境的 NLS 设置

    【讨论】:

      【解决方案3】:

      你可以使用时间戳

      select to_timestamp(A, 'DD/MM/YY HH24:MI:SS') from MyTable
      

      【讨论】:

        【解决方案4】:

        如果您希望查询返回日期的时间部分而无需更改 nls_date_format,您可以将您从 to_date 函数获得的日期转换为文本表示(默认文本表示为 dd-Mon-yy)发现)像这样:

        select to_char(
           to_date(A,'DD/MM/YY HH24:MI:SS'),
           ''DD/MM/YY HH24:MI:SS')
        from MyTable;
        

        理想情况下,MyTable 的 A 列应该被定义为日期列而不是 varchar2 列。这样做有几个原因;数据完整性和更好的 SQL 优化。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-14
          • 2019-03-29
          • 1970-01-01
          • 2011-12-16
          • 1970-01-01
          相关资源
          最近更新 更多