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
但您真的不应该将时间戳存储为CHAR
或VARCHAR
。
【讨论】:
是的!效果很好,只是在谷歌搜索转换时间戳的方法!非常非常感谢这个:) 干杯芽... 还有这个:***.com/questions/5989539/… 对于timestamp
与datetime
的区别以及使用什么。【参考方案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 BY
。 GROUP BY
用于 COUNT(), SUM(), AVG()
等聚合。
是的好主意。通过选择它来检查 NOW() 是什么。可能会有不同的时区,然后你期望
我有几行具有相同的fixture_date,所以我将它们分组?如果我删除组,我最终会单独显示它们吗?这仍然行不通。这些是上面的时间戳,即使我在未来三天去,我仍然让它们全部显示???
@bumperbox - 它显示的时间戳一直到 11 月,区域不可能那么远??
mysql列是时间戳类型还是datetime时间?以上是关于SQL WHERE on now() 无法正常工作?的主要内容,如果未能解决你的问题,请参考以下文章
Oracle SQL:WHERE NOT EXISTS 无法正常运行