我正在尝试格式化我将通过变量获得的日期。
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 ;
有人可以帮我解决我在这里做错了什么吗?我已经调查了
答案 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>
简而言之:
TO_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年前,但仍然......!),那么您需要放一个{{围绕它使用相关格式。