SQL WHERE on now() 无法正常工作?

Posted

技术标签:

【中文标题】SQL WHERE on now() 无法正常工作?【英文标题】:SQL WHERE on now() not working correctly? 【发布时间】:2011-12-08 00:45:17 【问题描述】:

我有以下问题......

SELECT fixture_date FROM tbl_foot_games WHERE fixture_date < now() AND leagueid = '68' AND (type = '2' OR type = '12' OR type = '22' OR type = '32') GROUP BY fixture_date ORDER BY fixture_date

这正在输出以下内容....

1318876658 1319135858 1319395058 1319654258 1319913458 1320176258 1320435458 1320694658 1320953858 1321213058 1321472258

所有这些时间戳现在都提前了。 知道为什么它会输出任何东西吗?

但是,我确实需要将 now() 更改为未来 3 天。 72 小时!

有什么想法吗? 谢谢:)

【问题讨论】:

只是您也可以做的一个小改进,然后输入 ('2', '12', '22', '32') 我会修改@bumperbox 的评论,说您应该养成使用IN () 的习惯,因为它可以在您忘记包围时节省您的调试时间OR 中的 () 组,你开始得到各种不需要的行。 好的,谢谢你的建议...以前从未听说过这个,正如你所说的迈克尔,调试它是一种痛苦! 【参考方案1】:

试试:

SELECT fixture_date 
FROM tbl_foot_games 
WHERE FROM_UNIXTIME(fixture_date) < NOW() 
  AND leagueid = '68' 
AND type IN ('2', '12', '22', '32') 
GROUP BY fixture_date 
ORDER BY fixture_date

但您真的不应该将时间戳存储为CHARVARCHAR

【讨论】:

是的!效果很好,只是在谷歌搜索转换时间戳的方法!非常非常感谢这个:) 干杯芽... 还有这个:***.com/questions/5989539/… 对于timestampdatetime 的区别以及使用什么。【参考方案2】:

将您的查询更改为:

SELECT NOW(), fixture_date FROM tbl_foot_games ...

查看NOW() 返回的内容。您的查询似乎是正确的(GROUP BY 对我来说似乎有点无意义......)。要询问未来的日期,请像这样使用date_add:

... WHERE fixture_date < DATE_ADD(NOW(), INTERVAL 3 DAY) ...

【讨论】:

@Luke 如果您需要对重复行进行分组,则只需要 ORDER BYGROUP BY 用于 COUNT(), SUM(), AVG() 等聚合。 是的好主意。通过选择它来检查 NOW() 是什么。可能会有不同的时区,然后你期望 我有几行具有相同的fixture_date,所以我将它们分组?如果我删除组,我最终会单独显示它们吗?这仍然行不通。这些是上面的时间戳,即使我在未来三天去,我仍然让它们全部显示??? @bumperbox - 它显示的时间戳一直到 11 月,区域不可能那么远?? mysql列是时间戳类型还是datetime时间?

以上是关于SQL WHERE on now() 无法正常工作?的主要内容,如果未能解决你的问题,请参考以下文章

多表连接查询中,“on”和“where”有啥区别吗?

Sql 触发器无法正常工作,删除到 logtable

Oracle SQL:WHERE NOT EXISTS 无法正常运行

Laravel 查询具有 'where' 和 'orwhere' 无法正常工作

where 子句中的日期时间条件无法正常工作

Laravel Eloquent Where and or Where with Eager Load 无法正常工作