Comment seule case à la fois sur les champs datetime, mais ignore la date?
J'ai une colonne qui stocke les données dans le format datetime. Je veux vérifier pour tous les cas où le temps une partie de cette colonne n'est pas égal à 00:00:00:000 - la date n'a pas d'importance.
Fondamentalement, si le temps le() est une fonction, quelque chose comme ceci:
SELECT *
FROM progen.DY
WHERE TIME(DY_DATE) <> '00:00:00:000'
Comment dois-je faire?
OriginalL'auteur Michael A | 2013-02-27
Vous devez vous connecter pour publier un commentaire.
Vous avez seulement besoin d'un mineur tweak sur ce que vous avez déjà.
Utilisation CONVERTIR pour changer votre
DATETIME
à unTIME
.Il n'y a pas de limitations de le faire comme ça, du moins pas par rapport aux autres réponses. La mauvaise chose à propos de l'application de fonctions sur des colonnes comme ça, c'est que les index sur cette colonne ne peut pas être utilisé et SQL Server doit faire une analyse de la table de comprendre ce que les lignes dont vous avez besoin.
OriginalL'auteur Mikael Eriksson
Une autre façon est de le convertir en différents type de données, par exemple
OriginalL'auteur John Woo
Je le fais tout le temps lorsque l'on tente de voir si la colonne d'une table doit être transformé en une date au lieu d'un datetime, qui est vraiment la réponse.
le casting supprime le temps et datetime a une priorité plus élevée, de sorte que lorsque comparés, si le sont inégales puis il a une valeur de temps. Même chose pourrait être fait avec un casting de temps, avec un peu de syntaxe différente.
OriginalL'auteur jmoreno
Utilisation
DATEDIFF
etDATEADD
au lieu d'obtenir la date de la partie de type datetime. Comparer la colonne par rapport à la date uniquement, et ce sera le retour de ces lignes qui ont un non-temps zéro.La façon dont cela fonctionne est que nous avons d'abord calculer la différence (en jours) entre l'époque et de la valeur. Nous ajoutons que le nombre à l'époque de créer un nouveau type datetime. Depuis le résultat de
DATEDIFF
est un entier, en tout temps, composant reçoit arrondis.La fonction de temps pourrait alors être mis en œuvre par la suite, non pas que je le recommande pour ce scénario spécifique:
Edit: Comme mentionné dans d'autres réponses, que vous pouvez lancer à
DATE
pour obtenir le même effet queDATEADD(d, DATEDIFF(d, 0, DateColumn), 0)
, qui nettoie bien. Toutefois, la DATE n'a été ajouté dans SQL Server 2008, alors que la formule a de compatibilité au moins SQL 2000. Donc, si vous avez besoin de la rétro-compatibilité ou de traiter avec SQL CE, coulée à ce JOUR n'est pas disponible.OriginalL'auteur Mitch
OriginalL'auteur Ravindra Gullapalli