2017-01-22 1 views
0

Veuillez vérifier la capture d'écran, afin que vous compreniez les colonnes et mes besoins.Calculer les heures de travail entre 2 colonnes (0)

enter image description here

Mes questions sont les suivantes:

1) J'ai 2 colonnes, FROM_TIME, till_time. J'ai besoin de calculer la différence afin que je puisse rapporter les heures. Exemple: FROM_TIME = 11: 35, till_time = 12: 35 >> time_worked = 01: 00

Comment puis-je faire le calcul, donc je peux faire sélectionner et signaler comme « sélectionner le groupe '' worked_hours totale par ' Can_bill ' »

2) J'ai une procédure:

SELECT 
     [ROW_ID] 
     ,[User_Name] 
     ,[Date] 
     ,[From_Time] 
     ,[Till_Time] 
     ,[Customer_Name] 
     ,[Product_Name] 
     ,[Type_Of_Service] 
     ,[Can_Bill] 
     ,[Type_Impliment] 
     ,[Notes] 
    FROM [SG_Hours].[dbo].[Working_Hours_CheckIn] 
Where User_Name = '@Login' 
     And MONTH(Date) = MONTH(GetDate()) 

maintenant, je dois créer la même chose, mais au lieu d'obtenir le dernier rapport du mois, j'ai besoin l'utilisateur de sélectionner mois , et ensuite lui fournir le rapport pour le mois spécifique. (Il a été implémenté sur une application BI donc j'ai juste besoin du code \ procédure, et l'interface utilisateur sera impliquée.)

Merci beaucoup! Vous êtes le meilleur

+0

Avez-vous essayé 'DateDiff' ? – Sami

+0

Non, ce n'est pas un cas de type Datetime. –

+0

Merci, pourriez-vous s'il vous plaît l'exemple? –

Répondre

0

Cette volonté donne Time Worked (minutes):

SELECT (CONVERT(INT, REPLACE(
         CONVERT(VARCHAR(8), till_time, 108), 
         ':', 
         '' 
        ) 
      ) - 
CONVERT(INT, REPLACE(
         CONVERT(VARCHAR(8), from_time, 108), 
         ':', 
         '' 
        ) 
      ) ) As time_worked FROM [SG_Hours].[dbo].[Working_Hours_CheckIn] 

Si vous voulez convertir les minutes à Time vous pouvez le faire comme:

set @num = 1500000; -- the resault of minutes    


select dateadd(hour, (@num/1000000) % 100, 
     dateadd(minute, (@num/10000) % 100, 
     dateadd(second, (@num/100) % 100, 
     dateadd(millisecond, (@num % 100) * 10, cast('00:00:00' as time))))) As time_worked 
+0

merci, cela fonctionne. comment puis-je le convertir? dois-je définir une procédure et mettre la deuxième partie? –

+0

Si cela fonctionne pour vous, vous pouvez accepter ma réponse, et vous pouvez simplement l'ajouter à votre requête ou comme procédure que vous le souhaitez. – Sami

+0

Tohether il ne peut pas fonctionner, désolé. –