zoukankan      html  css  js  c++  java
  • SQL自定义函数实现时间转换

    数据库里面显示2个时间差
    select datediff(minute ,'2008-11-20 19:20:00','2008-11-20 20:50:00')
    这样子得出来的是 90 分钟
    但我要显示成 1:30分 该怎么做,?

    解决:
    select convert(varchar(5),dateadd(ss, datediff(ss ,'2008-11-20 19:20:00','2008-11-20 20:50:00') ,108),108)

    又问:

    要是我的时间差大于24小时,那显示出来的就不正确了阿,

    应该要显示 小时是大于 24的一个数,而不是又回过去了阿。。

    下面用自定义函数的方法解决

    Create function [dbo].[f_second_Time] (@second int)
    returns varchar(16)
    as
    BEGIN
    /* 根据传入的秒数返回秒数所对应的时间,格式为天\时\分\秒
    Create by cjs 2008-11-20
    使用: select dbo.[f_second_Time](214580)
    注意:可查询的最大秒数为35999999,即9999时59分59秒,
    这与返回中cast(@Hours as varchar(4))有关,如果需要更大的精度
    可以在返回时改成如cast(@Hours as varchar(8))
    */
    declare @Secs int
    declare @Mins int
    declare @Hours int
    declare @Days int

    set @Secs=@second%60 --
    set @Mins=(@second-(@second%60))/60 /*若中间需要减去一个小时,则(@second-(@second%60))/60-60*/
    set @Hours=(@Mins-(@Mins%60))/60
    set @Mins=@Mins-@Hours*60 ---'分钟
    --
    如果要转成日,用下面注释的部分,即把/*去掉
    /*

    set @Days=(@Hours-(@Hours%24))/24 ---'日
    set @Hours=@Hours-@Days*24 ---'小时
    return cast(@Days as varchar(6))
    +'日'+
    cast(@Hours as varchar(4))
    +'时'+
    cast(@Mins as varchar(4))
    +'分'+
    cast(@Secs as varchar(4))
    +'秒'
    */
    --如果要转成日,用上面注释的部分,即把*/去掉,并且把下面的返回注释

    return cast(@Hours as varchar(6))+''+cast(@Mins as varchar(4))+''
    +cast(@Secs as varchar(4))+''

    END

    Go



    --调用

    select [dbo].[f_second_Time]( datediff(ss ,'2008-11-12 19:20:00','2008-11-20 20:51:00'))


    以下为结果
    ----------------
    193时31分0秒

    (1 行受影响)

  • 相关阅读:
    750. Number Of Corner Rectangles
    [Project Euler] 3. Largest Prime factor
    [Project Euler] 2. Even Fibonacci numbers
    Jmeter学习笔记3-参数化
    SQL多表连接查询补充
    Jmeter学习笔记2-原件作用域与执行顺序
    Jmeter学习笔记1-实践介绍
    运用badboy录制jmeter脚本
    【SQL提数】左连接使用
    【功能测试技巧2】dubbo引起的数据精度的思考
  • 原文地址:https://www.cnblogs.com/fuge/p/2349058.html
Copyright © 2011-2022 走看看