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'

displayという単語に注意してください。これだけです。それだけを考えるべきです。日付の表示方法は、保存方法にはまったく影響しません。

通常は、TO_CHAR()を適切なフォーマット モデルで使用して、日付を表示しますto_char(my_date, 'dd-mm-yyyy')。もはやデートではなくキャラクター。

あなたが言ったように日付を表​​示したいようには見えません。関数から値を返しています。その場合、私はあなたが持っているものに固執します。日付をデータベースから取り出すときに表示に適した形式に変換するだけでよく、常に日付としてデータベースに保存してください。これは、データベースに保存されたときにどのように見えるかは問題ではなく、実際には日付であることを意味します。

于 2012-12-08T08:38:04.780 に答える