美文网首页
[原创]使用mysql 自定义函数来实现mysql查询格式化数值

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

作者: 吉凶以情迁 | 来源:发表于2021-09-01 23:26 被阅读0次

    首先,如果使用辅助工具也是可以实现的,但是能只用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查询格式化数值

          本文链接:https://www.haomeiwen.com/subject/ywvuyctx.html