如何在PLSQL中格式化Date变量

时间:2011-09-22 13:44:14

标签: syntax plsql

我是PL / SQL的新手并且有这个问题。

我使用以下规范创建了一个过程:

PROCEDURE runschedule (i_RunDate  IN DATE)

i_RunDate具有特定格式,我需要将其更改为以下格式:

'MM/dd/yyyy hh:mi:ss PM'

我找不到如何重新格式化Date变量。

2 个答案:

答案 0 :(得分:4)

您需要使用TO_CHAR功能。这是一个例子:

SELECT TO_CHAR(CURRENT_TIMESTAMP, 'MM/DD/YYYY HH12:MI:SS AM') FROM dual;

答案 1 :(得分:3)

DATE没有特定格式,DATE是DATE。当存储在数据库列中时,日期值包括从午夜开始的以秒为单位的时间,并且DATE变量具有相同的值,仅在某些时候显示变量的格式。 PL / SQL可以隐式转换值的数据类型,例如,可以将CHAR值'02 -JUN-92'转换为DATE值..但我不建议您依赖此隐式转换。我总是使用显式转换。 有关此主题的更多信息,您可以阅读: http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/datatypes.htm#i9118

在您的情况下,如果您想格式化DATE以记录某些内容,或者以不同的格式显示在您的UI或监视器中,您需要将其分配给varchar变量,就像Justin所说的那样:

....
v_generated_run_date DATE; 
v_var_date VARCHAR2(30);
BEGIN -- generate sysdate if required 
IF (i_RunDate is null) 
THEN 
v_var_date:=TO_CHAR(sysdate, 'MM/DD/YYYY HH12:MI:SS AM'); 
ELSE 
v_var_date:=TO_CHAR(i_RunDate,'MM/DD/YYYY HH12:MI:SS AM'); 
END IF; 
pkgschedule.createschedule (v_var_date); 
commit; 
END runschedule; 
END 

在这种情况下,您的createdchedule过程将具有varchar2参数...