2009-08-19 5 views
1

La requête Postgresql ci-dessous doit renvoyer le type de date suivante ti varchar() type, mais son erreur donnant. Je l'ai même essayé avec convert (en utilisant return aussi), mais ça donne quand même des erreurs.Aidez-moi à résoudre cette requête Postgresql

CREATE FUNCTION TimePart(fDate out date) 
--RETURNS date 
AS $$ 
BEGIN 

cast(fDate AS char(10)); 

END; 
$$ language 'sql' 

Répondre

4
  1. fonctions SQL ne commencent utilisent -> fin - il est seulement dans plpgsql
  2. (fDate la date)? quel genre de syntaxe est-ce?
  3. Pourquoi la date de retour est-elle mise en commentaire?
  4. pourquoi il n'y a pas de "select" dans cast dans le corps de la fonction?
  5. il n'y a pas de point dans cette fonction - vous pouvez simplement utiliser select some_date_column :: varchar sur votre propre dans sql requête
  6. ne pas utiliser char() type de données - ce n'est pas plus rapide que varchar, et peut conduire à des subtiles (ou pas d'erreurs si subtiles).
  7. Le langage sql n'accepte pas les paramètres nommés (fDate)
  8. datepart est déjà le nom de la fonction intégrée - et l'écrase définitivement c'est une mauvaise idée.

En supposant que vous voulez la fonction qui convertit le paramètre de date à une valeur varchar (que vous ne avez pas besoin de fonction pour faire - ce que je l'ai souligné au point 5 ci-dessus), vous pouvez utiliser:

create function date_to_varchar(date) returns varchar as $$ 
select $1::varchar; 
$$ language sql; 
+0

merci u beaucoup pour ur entrée, il était vraiment d'une grande aide ..... :-) –

0

Essayez ceci:

CREATE FUNCTION TimePart(fDate out date) 
--RETURNS date 
AS $$ 
BEGIN 

    fDate := cast(fDate AS varchar(10)); 

END; 
$$ language 'plpgsql' 

Si vous allez utiliser des variables, vous devez utiliser plpgsql comme langue. En outre, utilisez un varchar. De cette façon, vous n'aurez pas à passer des cycles à essayer de le réduire.

0

Pour convertir la date d'entrée à un varchar, essayez ceci:

CREATE FUNCTION TimePart(fDate date) 
RETURNS varchar AS 
$$ 
BEGIN 
    return fDate::varchar; 
END; 
$$ LANGUAGE 'plpgsql'; 
Questions connexes