[原创]使用mysql 自定义函数来实现mysql查询格式化数值类型问题

首先,如果使用辅助工具也是可以实现的,但是能只用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()于是乎我就觉得我这样用也是没问题的,没想到果然如此。

你可能感兴趣的:([原创]使用mysql 自定义函数来实现mysql查询格式化数值类型问题)