【问题标题】:Insert php date("Y-m-d") directly into SQL query将 php date("Y-m-d") 直接插入 SQL 查询
【发布时间】:2014-04-21 12:42:03
【问题描述】:

我目前正在运行 SQL 查询来计算昨天的结果。我正在尝试压缩我的代码,并想知道是否有一种方法可以插入以下命令...

date("Y-m-d", strtotime( '-1 days' ) );

直接进入我的查询?目前我正在为其分配一个变量,然后像这样插入变量......

$yesterday = date("Y-m-d", strtotime( '-1 days' ) );
SELECT COUNT(*) as count FROM my_table WHERE value='d01' AND date LIKE '%$yesterday%'

【问题讨论】:

  • 您在使用 PDO 吗?如果是这样,为什么不直接将其绑定为参数?
  • 日期像'%$yesterday%'?如果您将日期存储为字符串,则压缩代码是您的问题最少。

标签: php sql date


【解决方案1】:

你可以使用mysql函数来做JOB

date = DATE(DATE_SUB(NOW(), INTERVAL 1 DAY))

这里进一步解释

mysql> select DATE_SUB(NOW(), INTERVAL 1 DAY);
+---------------------------------+
| DATE_SUB(NOW(), INTERVAL 1 DAY) |
+---------------------------------+
| 2014-04-20 07:27:01             | 
+---------------------------------+
1 row in set (0.03 sec)

mysql> select DATE(DATE_SUB(NOW(), INTERVAL 1 DAY));
+---------------------------------------+
| DATE(DATE_SUB(NOW(), INTERVAL 1 DAY)) |
+---------------------------------------+
| 2014-04-20                            | 
+---------------------------------------+

【讨论】:

  • 间隔1天不代表“昨天”。
  • 是的,昨天先在 mysql 中检查,看看结果如何。您可以使用 DATE() 消除 H:i:s
  • 现在好多了 - 但我认为,当日期用 H:i:s 保存时,你需要DATE(date) = DATE(DATE_SUB(NOW(), INTERVAL 1 DAY))
【解决方案2】:

您可以使用普通的(我的)SQL 来实现这一点:

SELECT COUNT(*) as count FROM my_table WHERE value='d01' AND
   YEAR(date) = YEAR(DATE_SUB(NOW(), INTERVAL 1 DAY)) AND
   MONTH(date) = MONTH(DATE_SUB(NOW(), INTERVAL 1 DAY)) AND
   DAY(date) = DAY(DATE_SUB(NOW(), INTERVAL 1 DAY))

或 - 保持紧凑:

  WHERE DATE(date_column) = DATE(DATE_SUB(NOW(), INTERVAL 1 DAY)) 

重要的是不要只使用间隔,因为它会回到 24 小时 - 所以在 23:50,您只能捕捉到“昨天”的 10 分钟。要么只比较年/月和日 - 要么在两边使用 DATE() 函数,这将减少双方完全一样:年/月和日。

【讨论】:

  • 为了压缩我的代码,但这不会增加更多的膨胀吗?
  • @fightstarr20 查看我对另一篇帖子的评论:您可以将其缩减为DATE(date_column) = DATE(DATE_SUB(NOW(), INTERVAL 1 DAY))
【解决方案3】:

试试这样的

SELECT COUNT(*) as count FROM my_table WHERE value='d01' AND DATE(date) = DATE(DATE_SUB(NOW(), INTERVAL 1 DAY));

【讨论】:

  • 这将返回“所有”行,导致您无法将日期与任何内容进行比较。
  • 还是错了,因为Interval 1 day 不代表“昨天”。
  • 比是什么意思?
  • 首先,您正在与 = 进行比较 - 意思是,当 DATE_SUB(NOW(), INTERVAL 1 DAY 将返回 2014-04-21 15:00:00 - 您将在 2014-04-20 准确搜索一个条目15:00:00。所以你需要使用>=。然后,间隔意味着,它只会拾取不超过 24 小时的值 - 但在 15:00 它将错过“昨天”的 15 小时。
  • 现在是正确的。但是现在它是提供相同声明的第三个答案:)
猜你喜欢
  • 1970-01-01
  • 2016-12-20
  • 1970-01-01
  • 2021-03-09
  • 2023-03-15
  • 1970-01-01
  • 2011-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多