2010-10-09 1 views
3

J'ai une requête qui récupère le nom de l'employé, la date, les heures de travail, le salaire et calcule le salaire en fonction du temps de travail * salaire.Comment calculer les heures de travail y compris les minutes?

Les minutes en cours de calcul calculées sont ignorées. Je n'ai que la valeur en une heure complète. exemple instantané:

Ma principale préoccupation est workingHours et wageAmount

alt text

workingHours est affiché comme 5. Voici l'instantané des feuilles de temps:

alt text

Comme vous le voyez changement commence à 10h30 et se termine à 16h00 (heure du déjeuner non comprise), donc le nombre total d'heures est de 4 heures et demie et non de 5.

Voici l'extrait de requête qui calcule les heures:

DATEDIFF(HOUR, shiftStart.timeEntered, shiftEnd.timeEntered) - DATEDIFF(HOUR, lunchStart.timeEntered, lunchEnd.timeEntered) AS workingHours, 

MA QUESTION EST:

1. Comment puis-je calculer les heures de travail avec précision minutes inclus (jeter secondes)?

Depuis Je compte les minutes, je vais devoir calculer le salaire par minute, donc je vais devoir mettre le code suivant qui calcule le salaire par minute:

   ROUND((((DATEDIFF(HOUR, shiftStart.timeEntered, shiftEnd.timeEntered) - DATEDIFF(HOUR, lunchStart.timeEntered, lunchEnd.timeEntered)) * 60) * (cast(((w.wageAmount/60)-((w.wageAmount/60)%.001)) as decimal (18,3)))), 0) AS "SalaryPerMin", 

Répondre

3

Utilisez DATEDIFF(minute, shiftStart.timeEntered, shiftEnd.timeEntered) * 1.0/60 à la place, pour donner vous l'heure en décimal.

+0

Great ... Je reçois une valeur qui ressemble à ceci: –

+0

4,514406 .... J'ai besoin d'un moyen rapide et simple pour tronquer la décimale sans arrondir à une décimale, donc la sortie sera 4.5 ... Une idée? –

+1

Got it ........... –

1

Les affaires de cartes de temps sont très exigeantes en termes de règles métier. Je considérerais votre architecture avant de mettre toutes les règles dans sp.

0

Cela renverra Heures & Minutes: CAST (DATEDIFF (MINUTE, StartTime, EndTime) AS DECIMAL)/60