2012-05-11 11 views
0

J'ai une heure stockée en tant que colonne décimale (9,2) dans une base de données sql-server 2005.Vérification des minutes non divisées de manière égale par 5

Le temps est représenté comme
temps timeInDecimal
1H 20Min 1.33
1H 30Min 1,50
et ainsi de suite

je recherche un moyen facile de vérifier si le nombre de minutes, sauf des heures entières n'est pas divisée par 5.
La valeur que j'espère trouver est où l'heure est 1H: 23Min mais pas 1H: 25MIN.
Je voulais juste comparer la partie minute de l'heure.

La façon dont je fais maintenant est:

RIGHT(CONVERT(varchar(5),DATEADD(minute,ROUND(timeInDecimal * 60,0),0),108),1) not in ('0','5') 

Mais il ne semble guère être le moyen idéal pour traiter cette question. Il me semble que je peux utiliser l'opérateur modulo pour cela, mais comment? Ou y a-t-il un moyen encore meilleur?

Espérons une réponse rapide.
Sincères salutations
Andreas

Répondre

3

Utilisation de l'opérateur de module, deux fois:

ROUND((timeInDecimal % 1) * 60, 0) % 5 <> 0 

qui:

  1. Obtenez la partie fractionnaire et le convertir en minutes.
  2. Arrondissez-le à la minute la plus proche (0,33 heure -> 20 minutes, pas 19,80).
  3. Vérifiez si c'est divisible par 5.
+0

Great! Fonctionne comme un charme! – Andreas

Questions connexes