【问题标题】:mysql datetime range selectmysql日期时间范围选择
【发布时间】:2012-04-12 22:48:12
【问题描述】:

我在系统中有定期付款模式。一切都很好,API 成功响应记录在数据库中。 我的问题是,我即将自动化系统的后续支付操作(不幸的是,支付网关不支持)。 通过 cron 我将安排检查是否必须将哪些帐户包含在后续流程和通知中。 我这里有一个数据库条目的片段:

+---------------------+---------------------+--------------------+
| payment_date        | payment_expirydate  | transaction_number |
+---------------------+---------------------+--------------------+
| 2012-02-14 03:47:15 | 2012-05-14 03:47:15 | 1-67815163         |
| 2012-02-16 00:53:03 | 2012-05-16 00:53:03 | 1-69010235         |
| 2012-02-16 08:57:16 | 2012-05-16 08:57:16 | 1-69027483         |
| 2012-02-16 09:08:06 | 2012-05-16 09:08:06 | 1-69027694         |
| 2012-02-16 09:58:17 | 2012-05-16 09:58:17 | 1-69028921         |
| 2012-02-17 09:28:32 | 2012-05-17 09:28:32 | 1-69072076         |
| 2012-02-17 06:17:45 | 2012-05-17 06:17:45 | 1-69068200         |
| 2012-02-17 11:12:08 | 2012-05-17 11:12:08 | 1-69074788         |
+---------------------+---------------------+--------------------+

我很难为此创建 SQL 查询。假设今天是2012-05-16,时间是07:00:00。我想获取今天和当前时间以下的所有帐户。例如,我需要的唯一有效帐户(基于我指出的当前日期和时间)是帐户 1-69010235

另外,如果我应该设置我的 cron 运行的时间间隔,有什么提示吗?

【问题讨论】:

  • select * from table where now() > unix_timestamp(payment_expirydate)
  • 您如何将今天的帐户列表提供给支付操作系统?
  • 谢谢,但这将在日期之前返回整个帐户。关于仅返回与当前日期相似的帐户的任何想法?
  • @cctan - 将返回结果放在一个数组中,然后我使用并行 curl 向 API 请求。
  • 您能否更具体地说明您的目标? “今天的帐目和小于当前时间的帐目”很难理解。我会猜测一下,看看我是否接近。

标签: mysql datetime cron


【解决方案1】:

此查询将返回今天到期的所有记录-

SELECT *
FROM accounts
WHERE payment_expirydate BETWEEN CURRENT_DATE AND (CURRENT_DATE + INTERVAL 1 DAY - INTERVAL 1 SECOND)

如果您希望所有帐户今天到期但小于当前时间 -

SELECT *
FROM accounts
WHERE payment_expirydate BETWEEN CURRENT_DATE AND CURRENT_TIMESTAMP

对于 codeigniter 的 AR 实现,你应该可以使用 -

$this->db->where('payment_expirydate BETWEEN CURRENT_DATE AND CURRENT_TIMESTAMP', NULL, FALSE);

【讨论】:

  • 我已将 CI AR 示例添加到我的答案中。希望这对你有用。我没试过,因为我不使用 CI。
【解决方案2】:
SELECT group_concat(transaction_number) as transaction_number
FROM tab
WHERE payment_date BETWEEN CURRENT_DATE AND CURRENT_TIMESTAMP

你可以使用它来返回一个字符串,并使用 perl 来拆分字符串并传递给 curl。

sqlfiddle here.

【讨论】:

  • 既然您已经修改了查询,我已经删除了我之前的评论。
【解决方案3】:

如果您希望您显示的表中的所有记录在当前时间有效 - 并且有效意味着 payment_date 早于现在而 payment_expirydate 晚于现在,您可以使用:

SELECT transaction_number from `table`
WHERE payment_date > now()
AND payment_expirydate < now();

这能得到你想要的吗?

【讨论】:

    猜你喜欢
    • 2011-04-27
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    • 2018-03-03
    • 2013-11-23
    • 2019-05-17
    • 1970-01-01
    • 2021-11-21
    相关资源
    最近更新 更多