2015-07-04 50 views
0

下面的代碼返回年度僱員誕生:如何創建或更換功能改成Convert_Year_to_Year到Day_to_Day

CREATE OR REPLACE FUNCTION Convert_Year_to_Year (Convert_Date IN Date) 
     RETURN Varchar2 AS 
BEGIN 
     RETURN (To_Char (Convert_Date, ‘YEAR’)); 
END; 
/

當我使用SELECT命令檢索數據,以下輸出顯示:

Select employee_id, hiredate, Convert_year_to_year (hiredate) AS Year_Hired 
FROM employees; 

EMPLOYEE_ID HIREDATE YEAR_HIRED 
     1 12/17/2007 TWO THOUSAND SEVEN 
     2 02/20/2008 TWO THOUSAND EIGHT 
     3 02/22/2008 TWO THOUSAND EIGHT 
     4 04/02/2008 TWO THOUSAND EIGHT 
     5 09/28/2008 TWO THOUSAND EIGHT 
     6 05/01/2008 TWO THOUSAND EIGHT 
     7 06/09/2008 TWO THOUSAND EIGHT 
     8 12/09/2008 TWO THOUSAND EIGHT 
     9 09/08/2007 TWO THOUSAND SEVEN 
     10 01/12/2007 TWO THOUSAND SEVEN 
  1. 我怎樣才能改變 「YEAR_HIRED」 以數字今年來說2007年?
  2. 如何更改「YEAR_HIRED」以返回當天的名稱以及星期幾?

此外,如果我想結合所有的RETURN,我該如何編寫代碼?下面沒有工作

CREATE OR REPLACE FUNCTION Convert_Year_to_Year (Convert_Date IN Date) 
    RETURN Varchar2 AS 
BEGIN 
    RETURN (To_Char (Convert_Date, 'YYYY'), 
    RETURN (To_Char (Convert_Date, 'DAY'), 
    RETURN (To_Char (Convert_Date, 'D')); 
END; 
/

EMPLOYEE_ID HIREDATE YEAR_HIRED DAY_HIRED NUMERICAL_DAY_OF_WEEK 
     1 12/17/2007 2007  MONDAY  1 
     2 02/20/2008 2008  WEDNESDAY 3 
     3 02/22/2008 2008  FRIDAY  5 
     4 04/02/2008 2008  WEDNESDAY 5 
     5 09/28/2008 2008  SUNDAY  7 
+0

什麼「一天的名字」和一週中的哪一天? – sstan

+0

你想返回3個不同的值(你需要3個獨立的函數)嗎?或者你想要1位大的返回值將3位信息連接在一起嗎? – sstan

回答

1

要獲取數字年份(例如2007):

TO_CHAR(Convert_Date, 'YYYY') 

要獲得星期幾的名稱(例如SATURDAY):

TO_CHAR(Convert_Date, 'DAY') 

要獲取星期幾的數值(例如7):

TO_CHAR(Convert_Date, 'D') 

如果你真的以非標準的方式得到一週的數值(例如,週一= 1,...星期六= 6,星期日= 7),那麼這個醜陋將做的工作:

to_char(decode(to_number(to_char(Convert_Date, 'D')) - 1, 0, 7, to_number(to_char(Convert_Date, 'D')) - 1)) 

編輯

要返回的信息的3位爲3個獨立的列您查詢,您需要創建3個獨立的功能,或者,乾脆寫這個查詢沒有的功能,這是不是做多的,你反正(但你不能在你的函數3條return語句):

Select employee_id, 
     hiredate, 
     TO_CHAR(hiredate, 'YYYY') AS Year_Hired, 
     TO_CHAR(hiredate, 'DAY') AS DAY_HIRED, 
     decode(to_number(to_char(hiredate, 'D')) - 1, 0, 7, to_number(to_char(hiredate, 'D')) - 1) AS NUMERICAL_DAY_OF_WEEK 
FROM employees; 
+0

當天的名稱是指(例如SUNDAY),並且星期幾是指(例如星期五爲5,星期日爲7) – SGIL

+0

我編輯了我的帖子。但是獲得星期數值的內置函數是'Sunday' ='1' ...'Saturday'' ='7'。你真的需要以非標準的方式來編號嗎? – sstan

+0

這太好了。非常感謝您 – SGIL