2013-04-12 12 views
1

J'ai quelques fonctions de date et heure dans ma base de données, mais je dois ajouter celui qui prend la partie du temps d'un champ datetime et convertit ensuite le temps en minutessql server 2005 temps converti en minutes

J'ai fonction qui obtient les minutes entre deux fois, mais pas seulement les minutes d'une seule fois.

ALTER FUNCTION [dbo].[fn_MinutesBetween] 
(@fStart datetime, @fEnd datetime) 
RETURNS int 
AS 
BEGIN 
RETURN DateDiff(minute, @fStart, @fEnd) 

et une autre qui obtient juste la partie du temps

ALTER function [dbo].[fn_ReturnTimeOnly] 
(@DateTime smallDateTime) 
returns nvarchar(50) 
as 
begin 
    Return substring(cast(@DateTime as varchar),12,len(@DateTime)) 

end 

Comment puis-je obtenir juste les minutes du temps. Comme 01h00 serait 60, 02h00 serait 120 24:00 serait 720 etc.

Merci

+0

Le message suivant a des réponses qui montrent comment calculer procès-verbal ** Depuis minuit ** dans 'SQL-SERVER 2005': http://stackoverflow.com/questions/4536330/datetime-to-totalminute-in -sql –

+0

J'ai essayé de le convertir à ma situation mais les résultats ne sont pas précis –

+0

En fait la conversion a bien fonctionné, je la comparais mal merci. Postez votre réponse afin que je puisse vous donner un crédit –

Répondre

1

Obtenez le nombre d'heures, jeter int, il faut multiplier par 60, obtenir le nombre de minutes, cast à int, ajouter ces deux.

ALTER function [dbo].[fn_ReturnMinutesOnly] 
(@DateTime smallDateTime) 
returns INT 
as 
begin 
     Return 
      cast(substring(cast(@DateTime as varchar),13,2) as INT) * 60 + 
      cast(substring(cast(@DateTime as varchar),16,2) as INT) 
end 
+0

Il ne donne pas l'heure exacte après 12 heures. J'ai modifié les informations du lien fourni dans les commentaires ci-dessus et cela a fonctionné –

+0

Merci pour la mise à jour, upvoted votre solution. –

0

Le moulage en chaîne est coûteux (I talk about the opposite scenario here, but the concept is the same). Essayez ceci:

DECLARE @DateTime DATETIME; 
SET @DateTime = GETDATE(); 

SELECT DATEDIFF(MINUTE, DATEDIFF(DAY, 0, @DateTime), @DateTime); 

Dans votre fonction, ce serait:

ALTER function [dbo].[fn_ReturnTimeOnly] 
(@DateTime smallDateTime) 
returns INT 
as 
begin 
    Return (SELECT DATEDIFF(MINUTE, DATEDIFF(DAY, 0, @DateTime), @DateTime)); 
end 
2

m'a donné un lien dans les commentaires à datetime to totalminute et utilisé que pour arriver à une solution.

ALTER FUNCTION [dbo].[fn_ReturnMinutesOnly] 
    (@dt smalldatetime) 

RETURNS int 
AS 
BEGIN 
    RETURN DATEDIFF(MINUTE, DATEADD(DAY, DATEDIFF(DAY, 0, @dt), 0), @dt) 
END