2009-06-10 7 views
1

J'ai une tâche planifiée journalière qui interroge une table qui inclut une colonne nommée AttemptDate avec datetime comme type de données. Cependant, la tâche interroge toutes les entrées, quelle que soit la date. Ainsi, lorsque les tâches exécute, il génère des entrées de toutes les dates ci-dessous:Comment obtenir des entrées de la partie date actuelle de la colonne avec datetime comme type de données (TSQL)

2009-06-06 06:01:30.852 
2009-06-07 01:41:46.719 
2009-06-08 03:58:23.945 

La requête SQL est présentée ci-dessous:

SELECT AttemptDate from dbo.ChangeAttempt 

Le tableau dbo.ChangeAttempt présente la structure suivante:

Column   Data Type  Constraints   
------   ---------  ----------- 

EventData  xml    NOT NULL 
AttemptDate  datetime  NOT NULL DEFAULT GETDATE() 
DBUser   char(50)  NOT NULL 

Ma question est: À partir de ma requête TSQL existante, comment puis-je obtenir des entrées de la partie de date actuelle si j'ajoute une clause where? Ce que je veux dire par date actuelle ici est la date à laquelle la requête TSQL est programmée pour s'exécuter.

AJOUT:

La version SQL Server J'exécute la requête TSQL contre est 2005.

Répondre

3
SELECT AttemptDate 
FROM dbo.ChangeAttempt 
WHERE AttemptDate >= cast(floor(cast(getdate() as float)) as datetime) 
+0

Merci beaucoup. Ça marche. – titanium

+2

Le moyen le plus rapide est une méthode de datiff/dateadd http://stackoverflow.com/questions/133081/most-efficient-way-in-ms-sql-to-get-date-from-datetime/150722#150722 J'ai vu similaire test dans SQL Server mag par Itzhak – gbn

1
SELECT AttemptDate 
FROM dbo.ChangeAttempt 
WHERE DATEDIFF(d, AttemptDate, GetDate()) = 0 
+0

Je crains que cela ne fonctionne que avant 12:00 PM DATEDIFF arrondit la différence – tekBlues

+0

DateDiff devrait ajouter un chaque fois qu'il franchit une limite pour la datepart. –

+0

Bien, mais assurez-vous que le symbole> = 0. L'application d'une fonction à la colonne de la table signifie que l'index ne sera pas utilisé, ce qui ralentira sur de nombreuses lignes. – gbn

0

Si vous demandez comment obtenez-vous les entrées qui ont été en situation de défaut par la contrainte , alors il n'y a pas comment la table est mise en place. Si vous omettez le trytdate, le serveur le fera par défaut pour vous en utilisant la date actuelle et ensuite il est impossible de dire .. si vous pouvez modifier la structure de la table, vous pouvez faciliter cela en utilisant un drapeau et un déclencheur

0

Je pense que votre requête fonctionnera mieux si vous enregistrez d'abord la base de données datetime en cours dans une variable:

DECLARE @curr_date datetime; 
SET @curr_date = cast(floor(cast(getdate() as float)) as datetime) 
SELECT AttemptDate 
FROM dbo.ChangeAttempt 
WHERE AttemptDate >= @curr_date 
Questions connexes