2011-09-09 4 views
-2

Je suis en train d'écrire une fonction définie par l'utilisateur dans SQL Server:chaîne de conversion datetime dans la fonction SQL Server

Il ressemble à ceci:

CREATE FUNCTION FormatDate(@fromtime nvarchar(50)) 
RETURNS DATETIME 
AS 
BEGIN 

    DECLARE @tempfrom datetime 
    DECLARE @tempto nvarchar(50) 

    set @tempfrom = Convert(datetime, @fromtime, 100) 
    RETURN @tempfrom 

END 

select dbo.FormatDate('08/17/2010 4:30') 

Lorsque je tente de lancer, je reçois la erreur suivante:

Conversion failed when converting the nvarchar value '08/17/2010 4:30' to data type int.

Qu'est-ce que je fais mal?

+1

Pourquoi nvarchar? Allez-vous avoir des trémas et des symboles yen dans vos chaînes de date? –

+0

non .. il peut être varchar ...... – user838359

+0

Y a-t-il un bon type de données à utiliser? – NullUserException

Répondre

1

Pourquoi utilisez-vous le style 100?

CREATE FUNCTION dbo.FormatDate -- schema prefix always! 
(
    @fromtime VARCHAR(50) -- varchar 
) 
RETURNS DATETIME 
AS 
BEGIN -- don't need variables anywhere 
    RETURN(CONVERT(DATETIME, @fromtime)); 
END 
GO 
+0

J'ai besoin de ces choses plus tard. C'est pourquoi j'utilise ces variables – user838359

+0

Plus tard où? Dans la fonction? –

+0

cependant, je vais encore obtenir la même erreur ... quand je cours le code – user838359

2

Les 100 que vous spécifiez dans la conversion sont utilisés pour formater lorsque vous sélectionnez des données et non pour formater le stockage des données.

Datetime est simplement stocké en tant que date-heure - c'est tout (je veux dire, en fonction de vos paramètres SQL, il peut être MM/JJ/AAAA ou JJ/MM/AAAA).

Mais si vous faites ceci:

set @tempfrom = Convert(datetime, @fromtime) 

il est maintenant un datetime, que vous pouvez convertir votre mise en forme souhaitée en l'enveloppant dans un autre converti:

convert(varchar, convert(datetime, @fromtime), 100) 
+0

Je reçois toujours la même erreur – user838359

+0

Parce que c'est pour sortir une chaîne formatée. Vous devez choisir si vous voulez sortir une chaîne formatée ou un datetime. Ensuite, la fonction doit indiquer RETURNS et retourner . –

Questions connexes