2014-10-08 79 views
1

我有一個挑戰:PostgreSQL日期轉換函數

我在SQL Server中有以下代碼,我想將它移動到PostgreSQL DBMS。

SQL Server Code

我適應它的PostgreSQL就像下面:

CREATE function public.SEMANA_ISO (fecha date) returns integer as $$ 
DECLARE 
    semana_ISO int= date_part ('week',fecha)+1 
    -date_part('week',CAST(date_part('year',fecha) as CHAR(4)) + '0104'); 
BEGIN 
    IF (semana_ISO=0) 
    THEN 
    semana_ISO=public.SEMANA_ISO(CAST(date_part('year',fecha)-1 
    AS CHAR(4)) + '12' + CAST(24 + date_part('day',fecha) AS CHAR(2)))+1; 

    ELSIF ((date_part('month',fecha)=12) AND ((date_part('day',fecha)-date_part('day',fecha))>=28)) 
    THEN 
    semana_ISO=1; 

    END IF; 

RETURN semana_ISO; 
END; 
$$ LANGUAGE plpgsql; 

正如你可能會看到,我試圖讓它看上去最相似的,如SQL Server是。 然而,當我嘗試運行此功能測試:

Select public.SEMANA_ISO('28/12/2014'); 

的DMBS顯示許多錯誤:

ERROR: operator does not exist: character + unknown 
LINE 2: ...rt('week',CAST(date_part('year',fecha) as CHAR(4)) + '0104') 

HINT: No operator matches the name and type of the arguments. You may need to add explicit type casts. 
QUERY: SELECT date_part ('week', date) +1 
-date_part ('week', CAST (date_part ('year', date) as CHAR (4)) + '0104') 
CONTEXT: PL/pgSQL function semana_iso (date) at line 5 during initialization of local variables in the statement block 

我嘗試做的是以下幾點。 以下的輸入日期格式:DD/MM/YYYY我想用上面的函數來顯示它作爲下一個輸出格式爲:MM-DD-YYYY

我已經在這樣做,可能會收到一個簡單的函數思想以給定格式(dd/mm/yyyy)和使用set datestyle = mdy語句的日期將其更改爲函數的主體並最終打印或返回。

你有什麼建議人?

您的幫助&時間總是感激!

+0

其實是出於什麼目的你使用這個功能' /存儲過程?只有你想轉換'datestyle'? – 2014-10-08 08:06:41

+0

更改日期的格式。從dd/mm/yyyy到mm-dd-yyyy – 2014-10-08 08:08:21

+0

確定某個表格中的特定項目還是什麼? – 2014-10-08 08:09:20

回答

0

猜測你可能需要一個Function像下面

CREATE function a_date_conv (fecha date) returns text as $$ 
select to_char(fecha, 'mm-dd-yyyy'); 
$$ LANGUAGE sql; 

選擇a_date_conv('08 /2014分之10' )

Result 
------- 
10-08-2014 
+1

太棒了,我剛剛完成編碼功能。感謝您的幫助翅膀豹 – 2014-10-08 08:26:11