SQL Conversion de int varchar
J'ai besoin d'aide de la conversion d'un integer
à un varchar
.
Je suis en train d'écrire une procédure qui prend un ProfileID
et un Currenttime
; à l'aide de ces deux valeurs qu'il trouve le temps de démarrage de l' profileID
et soustrait currenttime
de
starttime
et retourne hours:minutes:seconds
.
Ce que je fais mal, est-il une meilleure façon d'écrire cela?
Grâce.
CREATE PROCEDURE [dbo].[CalculateElaspedTime]
-- Add the parameters for the stored procedure here
@ProfileID nvarchar(10),
@CurrentDateTime datetime = ''
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
if @CurrentDateTime = CAST('' as datetime)
set @CurrentDateTime = GETDATE()
DECLARE @StartTime datetime;
DECLARE @ElaspedTime time;
DECLARE @hh int;
DECLARE @mm int;
DECLARE @ss int;
Declare @TimeString varchar
set @StartTime = (Select top 1 [DateTime] From Log WHERE ProfileID = @ProfileID);
set @hh = DateDiff(hour,@StartTime,@CurrentDateTime);
set @mm = DateDiff(minute,@StartTime,@CurrentDateTime)-60*@hh;
set @ss = DateDiff(second,@StartTime,@CurrentDateTime)-60*@mm;
set @TimeString = (Select CAST(@hh as varchar)); -- Fails Here
set @ElaspedTime = convert(datetime, cast(@hh as varchar) + ':' + cast(@mm as varchar) + ':' + cast(@ss as varchar));
INSERT INTO Log (ElaspedTime) Values (@ElaspedTime);
END
Quel est le message d'erreur?
Quelle est la valeur de @hh au point l'erreur se produit? En aparté, votre logique pour ElapsedTime suggère que vous n'êtes pas en se référant à l'intervalle.
La valeur de @hh = 1. Échec de la Conversion lors de la conversion de la date et/ou le temps de chaîne de caractères.
cast(@hh varchar) n'a pas pu être évalué
Avez-vous essayé de type nvarchar(10) à la place d'un varchar avec une longueur non spécifiée?
Quelle est la valeur de @hh au point l'erreur se produit? En aparté, votre logique pour ElapsedTime suggère que vous n'êtes pas en se référant à l'intervalle.
La valeur de @hh = 1. Échec de la Conversion lors de la conversion de la date et/ou le temps de chaîne de caractères.
cast(@hh varchar) n'a pas pu être évalué
Avez-vous essayé de type nvarchar(10) à la place d'un varchar avec une longueur non spécifiée?
OriginalL'auteur Pat | 2013-07-22
Vous devez vous connecter pour publier un commentaire.
De l'essayer. Toute cette excitation dans la fonction peut être inutile.
varchar
lors de la conversion. Savez-vous ce qu'est la valeur par défaut si vous omettez la longueur?Très vrai. Merci pour le pointeur.
OriginalL'auteur Eric Hauenstein
Un problème que vous avez est cette déclaration:
Ses résultats sont à durée indéterminée que SQL ne donne aucune garantie sur le résultat de l'ordre, sauf si vous spécifiez explicitement dans une clause ORDER BY. Vous devriez être en utilisant ORDER BY ou en utilisant une fonction d'agrégation comme MAX() pour obtenir le rang que vous voulez.
Et vous êtes en train de faire beaucoup plus de travail que nécessaire. SQL Server (versions récentes, de toute façon) soutien à la date de l'arithmétique, avec le résultat de la soustraction de deux dates étant une autre date (décalage à partir du Serveur SQL de l'époque de l'1 Janv 1900 00:00:00.000. Cette forme plus simple devrait vous faire, à moins que le temps écoulé dépasse 1 jour:
Si votre temps écoulé peut dépasser un jour, alors votre approche originale est ce que vous voulez:
OriginalL'auteur Nicholas Carey