以下不起作用:
set ServerOutput ON
accept anyDate DATE FORMAT 'YYYY-MM-DD' default '1982-01-24' prompt "Enter a date in this format 'YYYY-MM-DD':"
DECLARE
BEGIN
dbms_output.put_line(TO_CHAR(&anyDate, 'DD MONTH YYYY'));
END;
答案 0 :(得分:2)
因为&anyDate
会扩展为字符串,所以必须引用它:
TO_CHAR('&anyDate', 'DD MONTH YYYY')
有关详细信息,请参阅SQL*Plus how to accept text variable from prompt?。
以下是一个也解决转化的例子:
SQL@xe> accept foo date format 'YYYY-MM-DD' default '2000-01-01' prompt 'enter date: '
enter date: 2014-12-13
SQL@xe> select to_char(to_date('&foo', 'YYYY-MM-DD'), 'DD MONTH YYYY' ) from dual;
old 1: select to_char(to_date('&foo', 'YYYY-MM-DD'), 'DD MONTH YYYY' ) from dual
new 1: select to_char(to_date('2014-12-13', 'YYYY-MM-DD'), 'DD MONTH YYYY' ) from dual
TO_CHAR(TO_DATE('
-----------------
13 DECEMBER 2014
SQL@xe>
答案 1 :(得分:0)
我可以建议一种不同的方式。不使用接受和提示,您可以尝试这个片段,它可以解决您的问题。
SET ServerOutput ON
--Accept anyDate DATE FORMAT 'YYYY-MM-DD' default '1982-01-24' prompt "Enter a date in this format 'YYYY-MM-DD':"
DECLARE
DT_VAR VARCHAR2(100);
anydate DATE;
BEGIN
dt_var :='&Enter_date';
anydate:=TO_DATE(dt_var,'YYYY-MM-DD');
DT_VAR :=TO_CHAR(anydate,'MONTH');
dbms_output.put_line(DT_VAR);
END;
答案 2 :(得分:-1)
您好,你可以使用这样的东西 -
选择DateName(月,DateAdd(月,@ MonthNumber,-1))