0

我有一个函数应该接受格式的日期DD-MON-YY并应该以格式显示DD-MM-YYYY。我创建的功能是:

create or replace function PRINT_IT(abc date)
RETURN DATE
IS
  v_date DATE;
BEGIN
  if regexp_like(abc,'^[0-9]{2}-[a-z]{3}-[0-9]{2}$')
  then
    v_date := TO_DATE(abc,'DD-MM-YYYY');
  else
    dbms_output.put_line('wrong format');
  end if;
  dbms_output.put_line('The date is ');
  return v_date;
END PRINT_IT;

但返回的值总是错误的日期格式!!

4

1 回答 1

2

不,这不对。您的日期以NLS_DATE_FORMAT指定的格式输出。如果您想以不同方式显示,然后为您的会话更改此参数:

alter session set nls_date_format = 'dd-mm-yyyy'

注意显示字。这就是全部。这就是你应该考虑做的所有事情。日期的显示方式不会影响它的存储方式。

更通常的情况下,您可以使用带有适当格式模型的TO_CHAR()to_char(my_date, 'dd-mm-yyyy')来显示日期,即. 它将不再是一个日期,而是一个角色。

正如您所说,您似乎不想显示日期。你从你的函数中返回值,在这种情况下,我会坚持你所拥有的。您只需将日期从数据库中取出时,将其转换为适当的格式以显示,始终将其作为日期存储在数据库中。这反过来意味着它存储在数据库中时的样子并不重要,它实际上是一个日期。

于 2012-12-08T08:38:04.780 回答