首先,如果使用辅助工具也是可以实现的,但是能只用mysql工具就最好了。具有强迫症和钻研精神的我把这个想法给实现了。
由于我存储的授权信息是基于分钟而且是数值类型,因此直接通过数据库查询工具进行查询就有点蛋疼,查询的是数值,而不是时间。
首先是时间怎么获取打印的问题,刚开始研究now()
,day
发现都不太好用,timestamp()
函数结果一直报错,后面发现是参数有问题,后面使用了 current_timestamp()
发现还是有问题,只显示2019,于是先研究怎么打印函数.
经过测试发现 select current_timestamp()
;可以进行测试,
发现打印的是一个格式化的日期时间,于是搜索时间戳int,最后发现unix_timestamp(now());
可以,另外select UNIX_TIMESTAMP();
也可以,于是需求就解决了。
定义CurrentMinute()函数
CREATE DEFINER = `admin`@`%` FUNCTION `NewProc`()
RETURNS int(20)
NO SQL
BEGIN
#Routine body goes here...
declare second_ integer(100);
set second_ :=unix_timestamp(now());
#Current_Timestamp();
RETURN second_/60;
END;
定义秒转分钟函数
CREATE DEFINER = `admin`@`%` FUNCTION `NewProc`(`time1` integer)
RETURNS int(20)
SQL SECURITY INVOKER
BEGIN
#Routine body goes here...
RETURN time1/60;
END;
xx
现在的结果我还是不满意,我需要把结果集转换为格式化时间方便查看。
这里就设计到2个问题了,时间戳date类型与 时间戳 数值型互相转换,签名用到了 时间戳date类型转数值型,现在反过来了.
FROM_UNIXTIME(time*60)
就是把数值型转时间戳对象。然后用date_format
格式化一下
CREATE DEFINER = `admin`@`%` FUNCTION `NewProc`(`time` integer)
RETURNS varchar(255)
SQL SECURITY INVOKER
BEGIN
#Routine body goes here...
return date_format(FROM_UNIXTIME(time*60),'%Y-%m-%d %H:%i:%s');
END;
最后的验证
select currentMinute();
select UNIX_TIMESTAMP();
select formatMinute(26132081);
select *,formatMinute(vipendtime)as vipendtime_format from zhongbao where vipendtime>currentMinute();
image.png
这里还有一个灵感是基于系统函数count()于是乎我就觉得我这样用也是没问题的,没想到果然如此。
网友评论