2014-10-08 163 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