【问题标题】:Compare DateTime values by Min and not by Day in Coldfusion CFQUERY在 Coldfusion CFQUERY 中按 Min 而不是按 Day 比较 DateTime 值
【发布时间】:2010-06-28 03:12:52
【问题描述】:

这是我的查询。

<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# 的结果,唯一的问题是它只显示结果谁的差异是一整天,而不是那些差异的分钟。因此,与 #yourtime# 相差最小的 expdatetime 不会显示在结果中,除非相差至少一天。

如何针对最小精度优化此查询?

我知道两个可能有用的函数,DateDiff 和 DateCompare,但我不知道如何在查询中应用它们。

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

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

任何帮助将不胜感激。

【问题讨论】:

    标签: mysql coldfusion cfquery cfqueryparam


    【解决方案1】:

    尝试使用CF_SQL_TIMESTAMP,即:

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

    我不确定您是否需要maxlength 属性。我发现 CF 映射需要时间戳才能获得所需的精度。

    【讨论】:

    • 我相信这是正确的。通过使用 CF_SQL_DATE,您删除了时间信息,因此数据库服务器必须比较的只是日期信息;因此,最精确的是一天。如果您包含时间信息,那么它将在计算中使用它。
    【解决方案2】:

    mysql 函数timestampdiff 应该能满足你的需要

    TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
    

    单位值应为 MINUTE 或 DAY

    【讨论】:

      【解决方案3】:

      我自己是一名 MS-SQL 专家,但使用 DateDiff 函数并计算结果是正数、负数还是零应该可以告诉您所需的信息。

      但是,我不确定您为什么需要这样做。 IS LESS THAN 测试应该产生所需的结果,我唯一能想到的是,如果您的 #yourDate# 变量不够具体,即不包括时间,那么您的时间将被解释为 00:00:00,这会扭曲你的结果。我建议确保#yourDate# 中的数据尽可能具体。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-01
        • 1970-01-01
        相关资源
        最近更新 更多