0
votes

Comment utiliser le T-SQL pour faire le moins entre deux colonnes dans SQL Server?

J'ai une table nommée Employee STRY> dans SQL Server:

Employee   Clock-In                  Clock-Out                 Duration(day)
111        11/4/2019 2:31:08 PM      11/4/2019 4:31:08 PM      0
112        11/4/2019 2:31:08 PM      12/4/2019 2:31:08 PM      1
113        13/4/2019 2:31:08 PM                                2


2 commentaires

Vous avez le nombre de jours de 24 heures de temps? Une journée complète compte-t-elle s'il est entre 23h et 2h 2h le lendemain?


Oui compte pendant 24 heures de long


3 Réponses :


0
votes

Utiliser datrodiff () code> et SQL Server isnull () code> fonction, car votre colonnes code> sont avec dash code>, Vous devez vous échapper.

select Employee
  , [Clock-In]
  , [Clock-Out]
  , datediff(dd, [Clock-In], isnull([Clock-Out], getdate())) as Duration
from Employee 


1 commentaires

Vous devez délimiter les noms de colonne avec un caractère de tableau de bord.



3
votes

Utiliser dataiff () et coalesce () xxx

pour que vous puissiez créer une vue comme ci-dessous < Pré> xxx


3 commentaires

Soyez prudent avec le daturant avec jour , il ne reviendra pas toujours complet de 24 heures. Plus d'infos sur ma réponse.


Bonjour, avec votre requête, j'ai obtenu les données correctes que je veux, mais c'est dans Sélectionner une déclaration, quelle que soit la vue capable, mais toutes les idées peuvent diriger le stocker dans la base de données? Je fais face au problème sur la mise à jour automatique directement sur le serveur SQL, signifie que cette requête sera maintenue sur l'exécution de sorte que la colonne de durée affiche le dernier résultat


@Shijietio hey pour que vous puissiez créer une vue que j'ai modifiée



1
votes

Utiliser datrodiff code>, pas avec jour code> mais avec minute code> ou secondaire code>. L'exemple suivant revient 1 jour mais la quantité de temps est en réalité 2 secondes: xxx pré>

datrodiff code> avec jour code> ne prendra pas en compte le Portion de temps, il ne regardera que la différence de jour. P>

Vous pouvez donc utiliser un degré inférieur pour mesurer une journée complète, comme des minutes ou des secondes: P>

ALTER TABLE Employee ADD Duration AS DATEDIFF(
        MINUTE, 
        [Clock-In], 
        ISNULL([Clock-Out], GETDATE())) 
    / 1440


0 commentaires