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

Yon*_*oni 5 syntax plsql

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

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

PROCEDURE runschedule (i_RunDate  IN DATE)
Run Code Online (Sandbox Code Playgroud)

i_RunDate是一种特定的格式,我需要将其更改为这种格式:

'MM/dd/yyyy hh:mi:ss PM'
Run Code Online (Sandbox Code Playgroud)

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

Jus*_*ini 5

您需要使用该TO_CHAR功能。下面是一个例子:

SELECT TO_CHAR(CURRENT_TIMESTAMP, 'MM/DD/YYYY HH12:MI:SS AM') FROM dual;
Run Code Online (Sandbox Code Playgroud)


Ait*_*tor 4

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 
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您的createschedule 过程将有一个varchar2 参数...