2012-12-08 86 views
0

我有一個函數,該函數應接受格式爲DD-MON-YY的日期,並應以DD-MM-YYYY的格式顯示。我創建的功能是:將日期與預定義格式pl進行比較sql

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; 

但返回的值始終是錯誤的日期格式!

回答

2

不,不是。您的日期以您的NLS_DATE_FORMAT指定的格式輸出。我要顯示有差異,然後更改這個參數爲會話:

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

注字顯示。這就是這一切。這就是你應該考慮的一切。顯示日期的方式決不會影響存儲的方式。

更正常地,您可以使用TO_CHAR()和適當的格式模型來顯示日期,即to_char(my_date, 'dd-mm-yyyy')。它不再是一個日期,而是一個角色。

它看起來不像你想顯示日期,如你所說。你從你的函數返回值,在這種情況下,我會堅持你所擁有的。您只需將日期轉換爲適當的格式以便在將其從數據庫中取出時顯示,並始終將其作爲日期存儲在數據庫中。這反過來意味着它存儲在數據庫中時看起來沒什麼關係,只是它實際上是一個日期。

相關問題