Maison >base de données >tutoriel mysql >Comment puis-je comparer efficacement les valeurs de temps dans SQL Server sans tenir compte de la date ?

Comment puis-je comparer efficacement les valeurs de temps dans SQL Server sans tenir compte de la date ?

DDD
DDDoriginal
2024-12-22 03:33:10518parcourir

How Can I Efficiently Compare Time Values in SQL Server Without Considering the Date?

Comparaison des valeurs temporelles dans SQL Server

La comparaison des valeurs temporelles dans une requête de base de données peut être une tâche nuancée, en particulier si l'on considère les différences potentielles dans formats de date ou d’heure. Lorsque l'objectif est de comparer uniquement la partie temporelle, des techniques spécifiques sont nécessaires pour obtenir des résultats précis.

Énoncé du problème

Vous essayez de comparer des valeurs temporelles dans un champ datetime dans une requête SQL et vous n’êtes pas sûr de l’exactitude de votre approche. Plus précisément, vous souhaitez déterminer si 08:00:00 est inférieur ou supérieur à 07:30:00, quel que soit le composant de date.

Solution inefficace

Votre approche initiale consiste à convertir les valeurs startHour en datetime à l'aide de la fonction convert(), puis à les comparer. Bien que cette méthode puisse donner le résultat souhaité, elle peut s'avérer inefficace en raison des conversions de chaînes impliquées pour chaque ligne.

Comparaison de temps efficace

Pour des comparaisons de temps efficaces, il est Il est recommandé d'utiliser la représentation à virgule flottante inhérente des valeurs datetime dans SQL Server. Voici un guide étape par étape pour comparer les valeurs de temps :

  1. Convertissez la valeur datetime en un nombre à virgule flottante à l'aide de la fonction cast().
  2. Soustrayez la partie entière ( date) à partir de la valeur à virgule flottante à l'aide de la fonction floor(). Cela ne vous laisse que la composante temporelle.
  3. Soustrayez les composantes temporelles des deux valeurs datetime pour calculer la différence.

Exemple de requête

Considérons la requête suivante pour illustrer cette approche :

declare @first datetime
set @first = '2009-04-30 19:47:16.123'
declare @second datetime
set @second = '2009-04-10 19:47:16.123'

select (cast(@first as float) - floor(cast(@first as float))) -
       (cast(@second as float) - floor(cast(@second as float)))
       as Difference

Cette requête calcule la différence entre les portions temporelles du deux valeurs datetime, fournissant une comparaison directe de leurs composantes temporelles.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn