问题一:想要获取特定时间段的数据
一开始我使用下面的语句来获取过去一小时内发生的数据,注意这里由于列名中有中文,所以要打上反引号(键盘左上角)。
SELECT
`时间戳`,`列名1`,`列名2`
FROM
table_name
WHERE
DATE(`时间戳`)<=NOW() AND DATE(`时间戳`)>=SUBDATE(NOW(),INTERVAL 1 HOUR);
运行上述sql语句后没有返回任何结果,当我把时间跨度调到12小时,即:
SELECT
`时间戳`,`列名1`,`列名2`
FROM
table_name
WHERE
DATE(`时间戳`)<=NOW() AND DATE(`时间戳`)>=SUBDATE(NOW(),INTERVAL 12 HOUR);
结果Mysql给我返回了前一天从0点到24点的数据。
一开始我以为是时间类型的数据不能用’<’’>'号来比较,于是我换成了between,即
运行上述sql语句后没有返回任何结果,当我把时间跨度调到12小时,即:
SELECT
`时间戳`,`列名1`,`列名2`
FROM
table_name
WHERE
DATE(`时间戳`) BETWEEN DATE(`时间戳`)>=SUBDATE(NOW(),INTERVAL 12 HOUR) AND NOW();
结果仍然是前一天从0点到24点的数据。
后来尝试着把DATE(时间戳
)改成时间戳
,发现work了。即
SELECT
`时间戳`,`列名1`,`列名2`
FROM
table_name
WHERE
`时间戳` BETWEEN DATE(`时间戳`)>=SUBDATE(NOW(),INTERVAL 12 HOUR) AND NOW();
思考
出现这种情况的原因我想可能是因为我的数据库中时间戳
这一列的类型本来就是datetime类型的,再用DATE()进行转换会出现奇怪东西。