2010-06-28 15 views
1

C'est la requête que j'ai.Comparer les valeurs de DateTime par Min et non par jour dans Coldfusion CFQUERY

<cfquery name="qryname" datasource="dsn"> 
UPDATE ticketlist 
SET status = <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="Expired"> 
WHERE expdatetime < 
<cfqueryparam value = "#yourDate#" cfsqltype = "CF_SQL_DATE" maxLength = "19"> 
</cfquery> 

Il est capable de me donner tous les résultats Qui est expdatetime est moins # yourdate #, le seul problème est qu'il me montre que les résultats qui sa différence est une journée entière, mais pas ceux qui est la différence est min. Ainsi, expdatetime dont la différence est inférieure à # votre temps # par min ne s'affichera pas dans les résultats, sauf si la différence est d'au moins un jour.

Comment cette requête peut-elle être optimisée pour une précision minimale?

Je connais deux fonctions qui peuvent être utiles, le DateDiff & le DateCompare, mais je ne sais pas comment les appliquer dans la requête.

DateDiff ("datepart", "date1", "date2")

DateCompare ("date1", "date2" [, "DATEPART"])

DatePart Precision

* s Precise to the second 
* n Precise to the minute 
* h Precise to the hour 
* d Precise to the day 
* m Precise to the month 
* yyyy Precise to the year 

Toute aide sera appréciée.

Répondre

6

Essayez d'utiliser CF_SQL_TIMESTAMP, i.e.:

<cfqueryparam value = "#yourDate#" cfsqltype = "CF_SQL_TIMESTAMP"> 

Je ne sais pas si vous avez besoin de l'attribut maxlength. J'ai trouvé que la cartographie CF doit être horodatée pour obtenir la précision requise.

+2

Je crois que c'est correct. En utilisant CF_SQL_DATE, vous supprimez les informations de temps, de sorte que tout ce que le serveur de base de données doit comparer est une information de date; ainsi, le plus précis possible est un jour. Si vous incluez des informations sur l'heure, elles seront utilisées dans le calcul. –

+0

Ceci l'a résolu. Très appréciée! – Nich

1

La fonction mysql timestampdiff devrait faire ce que vous avez besoin

TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2) 

La valeur unitaire doit être MINUTE ou JOUR

+0

Cela a également fonctionné, merci Lee. – Nich

0

Je suis un gars MS-SQL moi-même, mais en utilisant une fonction DateDiff et calculer si la le résultat est positif, négatif, ou nul devrait vous dire l'information dont vous avez besoin.

Mais, je ne sais pas pourquoi vous auriez besoin de faire cela. Le test IS LESS THAN devrait produire les résultats nécessaires, la seule chose à laquelle je peux penser est si votre variable # yourDate # n'est pas assez spécifique, c'est-à-dire n'inclut pas l'heure, alors votre temps sera interprété comme 00:00:00, ce qui faussera vos résultats. Je vous recommande de vous assurer que les données de # yourDate # sont aussi précises que possible.