Pourquoi cette instruction INSERT avec DATEDIFF ne fonctionne-t-elle pas correctement?

StackOverflow https://stackoverflow.com/questions/812047

  •  03-07-2019
  •  | 
  •  

Question

INSERT INTO timecrunch.dbo.intervals (IntervalID, Duration) 
SELECT ixInterval, DATEDIFF(hour, dtStart, dtEnd) FROM fogbugz.dbo.TimeInterval
WHERE dtEnd is not NULL

IntervalID est un entier, Durée est un flottant

J'essaie de mettre toutes les durées horaires dans la colonne Durée ... Je suppose que même s'il reste moins d'une heure, il utilisera une fraction, raison pour laquelle je mets un flotteur?

Aide.

PS: Il fonctionne bien sans erreur, mais après cela, la table des intervalles est toujours vide ... Je sais que les données se trouvent dans la table TimeInterval ...

Était-ce utile?

La solution

Je ne sais pas pourquoi vos données ne s'affichent pas, mais DATEDIFF ne va pas renvoyer de float. Pour obtenir un flottant, vous voudrez probablement utiliser une unité de temps plus petite et diviser par le nombre d'unités par minute. Exemple:

DATEDIFF(second, dtStart, dtEnd) / (3600.0)

Autres conseils

DATEDIFF renvoie un Int du nombre de limites de parties de date traversées. Je m'attendrais à ce que vous obteniez le plancher du nombre d'heures, sauf en cas de problème de conversion implicite d'Int en float.

Il est également utile de poster le message d'erreur reçu.

Pour insérer des fractions d’heure réelles, utilisez:

INSERT INTO timecrunch.dbo.intervals (IntervalID, Duration) 
SELECT 
  ixInterval, 
  DATEDIFF(mi, dtStart, dtEnd) / 60.0
FROM 
  fogbugz.dbo.TimeInterval
WHERE 
  dtEnd is not NULL

DATEDIFF vous renvoie toujours une valeur INT, jamais une fraction.

Essayez d’exécuter lui-même le SELECT avec le bit INSERT pour vérifier que votre requête renvoie effectivement des données.

Éditer: Comme d’autres l’ont dit, DATEDIFF renvoie un int, pas un float, mais cela ne devrait pas empêcher l’INSERT d’insérer des données.

D'abord, quels résultats obtenez-vous simplement en exécutant la sélection?

Dans SQL Server DateDiff renvoie un entier ( Voir MSDN )

DATEDIFF renverra un int et non un float - s'agit-il du problème que vous rencontrez?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top