关于mysql时间戳存储过程用法

查询昨日数据

以今日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了。

你可能感兴趣的:(MySQL存储过程)