Syntax 如何在PLSQL中格式化日期变量

Syntax 如何在PLSQL中格式化日期变量,syntax,plsql,Syntax,Plsql,我是PL/SQL新手,有这个问题 我创建了一个具有以下规范的过程: PROCEDURE runschedule (i_RunDate IN DATE) 此i_运行日期采用特定格式,我需要将其更改为以下格式: 'MM/dd/yyyy hh:mi:ss PM' 我找不到如何重新格式化日期变量。您需要使用to\u CHAR函数。下面是一个例子: SELECT TO_CHAR(CURRENT_TIMESTAMP, 'MM/DD/YYYY HH12:MI:SS AM') FROM dual; 日期

我是PL/SQL新手,有这个问题

我创建了一个具有以下规范的过程:

PROCEDURE runschedule (i_RunDate  IN DATE)
此i_运行日期采用特定格式,我需要将其更改为以下格式:

'MM/dd/yyyy hh:mi:ss PM'
我找不到如何重新格式化日期变量。

您需要使用to\u CHAR函数。下面是一个例子:

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

日期没有特定的格式,日期就是日期。当存储在数据库列中时,日期值包括从午夜开始的一天中的时间(以秒为单位),并且日期变量具有相同的值,仅当在某个点显示变量已格式化时。PL/SQL可以隐式转换值的数据类型,例如,可以将字符值“02-JUN-92”转换为日期值。。但我不建议您依赖这种隐式转换。我总是使用显式转换。 有关此主题的更多信息,请阅读以下内容:

在您的情况下,如果您希望格式化日期以记录某些内容,或以不同的格式显示在UI或wathever中,则需要将其分配给一个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 

在本例中,您的createschedule过程将有一个varchar2参数…

您可能需要查看DBMS_调度程序包和Oracle概念指南。人们在Oracle上花了很多钱来避免编写他们自己的运行计划过程。谢谢Justin,但不是为了?CHAR会返回一个VARCHAR吗?我需要重新格式化它,并将其保留为日期变量。你能给我一些建议吗?你能发一些代码给我看看你是如何使用它的吗?通常,您需要格式化日期类型的唯一时间是将其作为字符串输出时,因此我对您的具体操作有点困惑。创建或替换包体pkgtmschedule as PROCEDURE runschedule I_RunDate IN date默认sysdate为v_generated_run_date date;开始-如果需要生成sysdate如果i_RunDate为null,则从dual选择sysdate进入v_generated_run_date;ELSE v_生成的运行日期:=i_运行日期;如果结束;pkgschedule.createschedule v_生成的运行日期;犯罪结束运行计划;结束pkgtmschedule/参考上面的代码:我收到I_RunDate作为日期,但我需要将其重新格式化为“MM/DD/YYYY HH12:MI:SS AM”,但由于它是一个日期,我不知道如何重新格式化它。另一点是,在查看nls_session_参数时,我看到nls_DATE_FORMAT=DD MON rr createschedule的过程定义是什么样的?换句话说,您应该传递给它的参数类型是什么?