2011-09-22 142 views
4

我是PL/SQL的新手,并且有这个问题。如何在PLSQL中格式化Date变量

我创建的过程有以下规格:

PROCEDURE runschedule (i_RunDate IN DATE) 

i_RunDate是在一个特定的格式,我需要将其更改为以下格式:

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

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

+1

你可能想看看DBMS_SCHEDULER包和Oracle概念指南。为了避免编写自己的运行计划程序,人们在Oracle上花费了大量资金。 –

回答

3

DATE没有特定的格式,DATE是日期。当存储在数据库列中时,日期值包括午夜以来的时间(以秒为单位),并且DATE变量具有相同的值,只有当您显示变量的某个点被格式化时。 PL/SQL可以隐式转换某个值的数据类型,例如,可以将CHAR值'02 -JUN-92'转换为DATE值..但我不建议您依赖此隐式转换。我总是使用显式转换。 更多关于这个话题,你可以这样说的:如果你想格式化你的约会记录的东西,或在您以不同格式UI或wathever显示 http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/datatypes.htm#i9118

在你的情况,你需要assig它为varchar变量贾斯汀说,这样的事情:

.... 
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 

你createschedule过程,在这种情况下,将有一个VARCHAR2参数...

4

您需要使用TO_CHAR函数。下面是一个示例:

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

感谢贾斯汀,但不是TO_CHAR会返回一个VARCHAR?我需要重新格式化它,并将其保留为Date变量。你能提出一些建议吗? – Yoni

+0

你可以发布一些代码,告诉我你是如何使用它?通常情况下,你只需要格式化一个日期类型就是把它作为一个字符串输出,所以我对你正在做的事情有点困惑。 –

+0

创建或更换包装箱pkgtmschedule AS PROCEDURE runschedule(i_RunDate IN DATE默认系统日期)IS v_generated_run_date DATE; BEGIN - 如果需要生成sysdate IF(i_RunDate为空)然后 SELECT sysdate INTO v_generated_run_date FROM dual; ELSE v_generated_run_date:= i_RunDate; END IF; pkgschedule.createschedule(v_generated_run_date); 承诺; END runschedule; END pkgtmschedule; / – Yoni