【问题标题】:Firebird check if date is before 12 pm of the current dayFirebird 检查日期是否在当天的下午 12 点之前
【发布时间】:2013-02-19 10:21:14
【问题描述】:

日期计算不是我的强项,我需要一点帮助。 我正在尝试检查所选字段中的日期(即时间戳)是否在当天中午 12 点之前。提前致谢。

场景:如果在当天中午 12 点之前下订单,则该订单符合 x,否则为 y。因此,我在 select 语句中得到了该订单的创建日期(包括时间)。

【问题讨论】:

    标签: firebird


    【解决方案1】:

    DATE 类型不携带时间信息,因此由您来定义日期的时间点。如果时间信息也很重要,您应该使用TIMESTAMP 类型。 无论如何,假设该字段将日期存储在 12pm 时间,然后您使用

    WHERE date_field <= CURRENT_DATE;
    

    CURRENT_DATE 是所谓的上下文变量,显然它返回当前日期。 CURRENT_TIMESTAMPCURRENT_TIME 也可用。您可以使用DATEADDDATEDIFF 内置函数进行一些日期计算。

    所以如果该字段实际上是时间戳,你可以这样做

    WHERE date_field < DateAdd(12 HOUR to cast(CURRENT_DATE as timestamp));
    

    【讨论】:

    • 嗯,谢谢您的回复。我了解您对时间戳的建议,但是如果它在 CURRENT_DATE/NOW 的中午 12 点之前,则必须检查我选择的日期字段。我将编辑我的问题来解释这个场景......
    • @user2086463 由于 Firebird 中的 DATE 没有时间部分,因此无法检查它是在“下午 12 点”之前还是之后,您需要使用 TIMESTAMP。跨度>
    • 正如马克已经写的那样,只有DATE 字段是不可能的,除非您有时间将订单存储到其他字段中。顺便说一句,使用am/pm 令人困惑(至少对我而言),我建议使用 24 小时制来明确您的问题。我认为您需要在当天中午之前下订单吗?
    • 嗯,没错——今天中午。我编辑了我的问题,说日期实际上是一个时间戳。很抱歉描述的模棱两可。
    • 是的,就是这样。所以 CURRENT_DATE 实际上是 2013 年 2 月 19 日上午 12:00,不包括时间分数?
    猜你喜欢
    • 2022-11-01
    • 2019-02-04
    • 1970-01-01
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多