Как отформатировать переменную Date в PLSQL - PullRequest
4 голосов
/ 22 сентября 2011

Я новичок в PL / SQL, и у меня возник этот вопрос.

Я создал процедуру со следующей спецификацией:

PROCEDURE runschedule (i_RunDate  IN DATE)

это i_RunDate поставляется в определенном формате, иМне нужно изменить его на этот формат:

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

Я не смог найти, как переформатировать переменную Date.

Ответы [ 2 ]

4 голосов
/ 22 сентября 2011

Вам необходимо использовать функцию TO_CHAR.Вот пример:

SELECT TO_CHAR(CURRENT_TIMESTAMP, 'MM/DD/YYYY HH12:MI:SS AM') FROM dual;
3 голосов
/ 26 сентября 2011

ДАТА не имеет определенного формата, ДАТА - это ДАТА.При хранении в столбце базы данных значения даты включают время дня в секундах с полуночи, а переменная DATE имеет то же самое, только если в какой-то момент вы показываете, что переменная отформатирована.PL / SQL может неявно преобразовывать тип данных значения, например, может преобразовывать значение CHAR '02 -JUN-92 'в значение DATE ... но я не рекомендую полагаться на этот неявный разговор.Я всегда использую явное преобразование.Чтобы узнать больше об этой теме, вы можете прочитать это: http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/datatypes.htm#i9118

В вашем случае, если вы хотите отформатировать DATE для записи чего-либо или для отображения в вашем интерфейсе пользователя или в другом формате, вам нужночтобы привязать его к переменной 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 

Ваша процедура createchedule в этом случае будет иметь параметр varchar2 ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...