格式参数日期oracle

时间:2015-02-25 14:09:19

标签: oracle

我正在尝试格式化我将通过变量获得的日期。

select  to_char(
          $$exec_Date          ,'dd-mm-yy hh24:mi:ss') 
         date
          from dual ;

已解决的价值是

select  to_char(
          04-02-2015 17:19:52          ,'dd-mm-yy hh24:mi:ss') 
         date
          from dual ;

工作正常

select  to_char(
          sysdate          ,'dd-mm-yy hh24:mi:ss') 
         date
          from dual ;

有人可以帮我解决我在这里做错了什么吗?我已经调查了

2 个答案:

答案 0 :(得分:0)

  

04-02-2015 17:19:52

Oracle不知道该值是 DATE 还是字符串还是什么?您必须先使用 TO_DATE 将文字转换为DATE。

但是,在您的情况下,您传递的值没有单引号,这意味着它不是文字。所以,你需要这样做:

select  to_char(
          to_date('04-02-2015 17:19:52','dd-mm-yyyy hh24:mi:ss')          ,'dd-mm-yy hh24:mi:ss') 
         date
          from dual ;

注意单引号和to_date函数。

您使用 TO_DATE 将文字转换为DATE, TO_CHAR 将日期转换为文字。 FORMAT MODEL 是最理想的。

对于所有类型的计算,请将日期保持原样。无需将其转换为字符串。但是,如果您有一个字符串,则需要先将其转换为DATE计算的日期。如果要以所需格式显示日期时间,请使用 TO_CHAR

答案 1 :(得分:0)

你到底想要做什么?

如果您只是将其用于显示目的,那么您不需要做任何事情,因为它已经是一个字符串(除非您需要更改显示日期的格式) ?)。

如果您需要将其转换为日期,以便将其存储在DATE列中,或者将其用于DATE比较,则需要使用TO_DATE,而不是TO_CHAR。< / p>

简而言之:

  • 如果您传入字符串(这是您正在做的事情)并且您想将其转换为Oracle中的DATE,请使用TO_DATE
  • 如果您希望以特定格式显示“DATE”数据类型的内容,请使用TO_CHAR

因此,您的to_char(sysdate, 'dd-mm-yy hh24:mi:ss')工作 - 它将sysdate(具有DATE数据类型)转换为该格式的字符串。

在您的示例中,您需要执行to_date($$exec_Date, 'dd-mm-yyyy hh24:mi:ss')

如果您需要重新格式化以显示2位数年份(严重吗?我知道y2k是15年前,但仍然......!),那么您需要放一个{{围绕它使用相关格式。