该函数假设以不同的格式返回日期,仅此而已。看不出有什么问题!
CREATE OR REPLACE
FUNCTION get_cpd(a_date in varchar2)return varchar2
IS
cpd varchar2(4);
BEGIN
SELECT TO_CHAR(TO_DATE(a_date,'YY/MM/DD'),'YDDD') INTO cpd FROM DUAL;
RETURN cpd;
END get_CPD;
这不是你调用函数的方式。在 Oracle 中,您必须始终从某些东西中进行选择。如果您没有要从中选择数据的实际表,请使用内置的单行表DUAL
:
select get_cpd('13/04/10') from dual;
如果它是更大查询的一部分,那么您可以传入列值:
select get_cpd(some_column) from some_table;
如果您从另一个 PL/SQL 块或其他客户端调用它,那么您不必拥有select
,例如
declare
cpd varchar2(4);
begin
cpd := get_cpd('13/04/10');
end;
/
...但这假设您将使用该值做某事,而不仅仅是显示它。
顺便说一句,您可以简化函数以利用这种调用方式to_char
:
create or replace function get_cpd(a_date in varchar2)
return varchar2 is
begin
return to_char(to_date(a_date,'YY/MM/DD'),'YDDD');
end get_cpd;
/
select get_cpd('13/04/11') from dual;
GET_CPD('13/04/11')
--------------------------------------------------------------------------------
3101
您可能还应该使用RR
而不是YY
两位数的年份,但请查看文档。