查询昨日数据
以今日2019-8-7为例,则需获取昨日到今日凌晨时间戳,1565020800 - 1565107200 完整日期格式为2019-8-6 0:00:00 - 2019-8-7 0:00:00
在MySQL中使用时间戳时需要使用函数UNIX_TIMESTAMP()
则完整的SQL语句为:
SELECT * FROM 表名
WHERE 创建时间字段
BETWEEN UNIX_TIMESTAMP(CAST(SYSDATE()AS DATE) - INTERVAL 1 DAY)
AND
UNIX_TIMESTAMP(CAST(SYSDATE()AS DATE))
查询今日数据
以今日2019-8-7为例,则需获取时间戳范围为 1565107200 - 1565193600,完整的时间格式为2019-8-7 0:00:00 - 2019-8-8 0:00:00
SELECT * FROM 表名
WHERE 创建时间字段
BETWEEN UNIX_TIMESTAMP(CAST(SYSDATE()AS DATE))
AND UNIX_TIMESTAMP(CAST(SYSDATE()AS DATE) + INTERVAL 1 DAY)
为方便以后调用,封装为存储过程,便于使用
CREATE PROCEDURE getDataByTableName(IN flg INT,IN tb VARCHAR(255))
BEGIN
IF(flg = 1) THEN
SET @sql = CONCAT('SELECT * FROM ',tb,' WHERE create_time BETWEEN UNIX_TIMESTAMP(CAST(SYSDATE()AS DATE) - INTERVAL 1 DAY)
AND UNIX_TIMESTAMP(CAST(SYSDATE()AS DATE))');
END IF;
IF(flg = 2) THEN
SET @sql = CONCAT('SELECT * FROM ',tb,' WHERE create_time BETWEEN UNIX_TIMESTAMP(CAST(SYSDATE()AS DATE))
AND UNIX_TIMESTAMP(CAST(SYSDATE()AS DATE) + INTERVAL 1 DAY)');
END IF;
PREPARE stmtt FROM @sql;
EXECUTE stmtt;
END;
参数 | 意义 |
---|---|
flg | 标识是昨天还是今天 |
tb | 表名,可以是视图名称 |
记踩坑经历,在IN 参数后未指明类型大小报错,参考一些资料都是未声明类型大小,挣扎了很久,终于ok了。