Coldfusion CFQUERY で DateTime 値を日ではなく分で比較する
-
01-10-2019 - |
質問
これが私の質問です。
<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>
expdatetime が #yourdate# より小さい人の結果はすべて表示されますが、唯一の問題は、誰の違いが丸 1 日であるかという結果のみが表示され、誰の違いが分単位であるかは表示されないことです。したがって、expdatetime の誰の差が #yourtime# よりも分未満である場合、差が少なくとも 1 日でない限り、結果には表示されません。
このクエリを最小精度に合わせて最適化するにはどうすればよいでしょうか?
DateDiff と DateCompare という便利な 2 つの関数は知っていますが、それらをクエリに適用する方法がわかりません。
DateDiff("日付部分", "日付1", "日付2")
DateCompare("date1", "date2" [, "datePart"])
日付部分の精度
* 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
助けていただければ幸いです。
解決
使用してみてください CF_SQL_TIMESTAMP
, 、つまり:
<cfqueryparam value = "#yourDate#" cfsqltype = "CF_SQL_TIMESTAMP">
あなたが必要かどうかはわかりません maxlength
属性。必要な精度を得るには、CFマッピングがタイムスタンプである必要があることがわかりました。
他のヒント
MySQL関数 TimeStampDiff 必要なことをする必要があります
TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
ユニット値は毎分または1日でなければなりません
私も MS-SQL を使用していますが、DateDiff 関数を使用して、結果が正か負かゼロかを計算すると、必要な情報が得られるはずです。
しかし、なぜこれを行う必要があるのかわかりません。IS LESS THAN テストは必要な結果を生成するはずですが、私が考えられる唯一のことは、#yourDate# 変数が十分具体的でない場合です。時間が含まれていない場合、時間は 00:00:00 として解釈され、結果が歪められます。#yourDate# のデータはできるだけ具体的なものにすることをお勧めします。