【问题标题】:Convert VARCHAR to Time in oracle在oracle中将VARCHAR转换为时间
【发布时间】:2013-06-01 05:29:39
【问题描述】:

我正在使用 ORACLE,我想使用以下 SQL 查询将 VARCHAR 类型转换为时间

SELECT CUSTOMER_SERVICE_QUOTE_MEAS.ITEM_CREATE_TM,
TO_char(
CUSTOMER_SERVICE_QUOTE_MEAS.ITEM_CREATE_TM,
'hh24:mi:ss')
AS TIME_CHANGE
FROM FDC.CUSTOMER_SERVICE_QUOTE_MEAS CUSTOMER_SERVICE_QUOTE_MEAS

这导致6/1/2013 11:32:02 AM,但我不想要这里的日期部分。
我只需要时间部分11:32:02,怎么做?

CUSTOMER_SERVICE_QUOTE_MEAS.ITEM_CREATE_TM 字段的数据类似于113202。 任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 欢迎来到 Stack Overflow。请不要将代码格式化为引号:格式就是代码,因此我们可以使用语法高亮和空格等好东西。这次我替你做了。
  • 您的代码不可能返回您声明的输出。它可能会触发ORA-01481: invalid number format model 错误。

标签: sql oracle types


【解决方案1】:

item_create_tm 列的数据类型是 NUMBER 吗? to_char 需要一个日期列。复制错误:

SELECT to_char(113202, 'hh24:mi:ss') FROM dual;

它会产生这个错误。

ORA-01481: invalid number format model
01481. 00000 -  "invalid number format model"
*Cause:    The user is attempting to either convert a number to a string
           via TO_CHAR or a string to a number via TO_NUMBER and has
           supplied an invalid number format model parameter.
*Action:   Consult your manual.

您可以先将其转换为日期,然后再转换为格式化的字符。

SELECT to_char(to_date(113202, 'hh24miss'), 'hh24:mi:ss') FROM dual;

输出

11:32:02

或者用 : 分隔符将数字子串成一个字符。

SELECT substr(113202, 1, 2) || ':' || substr(113202, 3, 2) || ':' || substr(113202, 5, 2) FROM dual;

输出

11:32:02

【讨论】:

    【解决方案2】:

    你可以用 to_char 和类似这样的格式来包装日期:

    select to_char( mydate, 'hh24:mi:ss' ) as mytime from mytable;
    

    【讨论】:

    • 谢谢兰迪,但我得到了这个错误。 ORA-01481: 无效的数字格式模型。
    • 兰迪。能否请您对上述问题有所了解。
    • TO_CHAR() 需要一个数字或日期,而不是字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    相关资源
    最近更新 更多