我可以获取sql accept日期变量的月份名称

时间:2014-04-08 08:09:28

标签: sql oracle plsql sqlplus

以下不起作用:

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;

3 个答案:

答案 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))

Convert Month Number to Month Name Function in SQL