zoukankan      html  css  js  c++  java
  • 返回两个时间范围内的一个随机时间

    /******************************
    *    函数名:RandDateTime
    *    作用: 返回两个时间范围内的一个随机时间
    *    Author:    兰习刚
    *    Date:      2009-11-30
    *******************************/
    Go
    --创建函数
    create Function RandDateTime
    (
        @RandNum Decimal(38,18),--0-1之际随机数值建议Rand()
        @StartTime DateTime,    --第一个时间
        @EndTime DateTime       --第二个时间
    )
    Returns DateTime
    As
    Begin
        Declare @HourDiff Decimal(38,18)    --两个时间之间的小时差值
        Declare @MsPartDiff Decimal(38,18)  --毫秒部分的差值  
        Declare @SmallDate DateTime
        Declare @ReturnDateTime DateTime   
       
        /*取各部分差值*/
        Set @HourDiff = DateDiff(hh,@StartTime,@EndTime)
        Set @MsPartDiff = Abs(DateDiff(ms,DateAdd(hh,@HourDiff,@StartTime),@EndTime))
        Select @SmallDate=(Case When @HourDiff>0 Then @StartTime Else @EndTime End)    --取较小的时间 
        Set @HourDiff = Abs(@HourDiff)
        ActionLable:
        Declare @HourDecimal Decimal(38,18)    --小时的小数部分  
        Declare @HourString varchar(200)
        Set @HourDiff = @HourDiff * @RandNum   
        Set @HourString = CONVERT(VARCHAR(200),@HourDiff)
        Set @HourString = SubString(@HourString,CharIndex('.',@HourString)+1,Len(@HourString))
        Set @HourString = '0.' + @HourString
        Set @HourDecimal = Convert(Decimal(38,18),@HourString)    --获得小时的小数部分
        Set @MsPartDiff = (@MsPartDiff + @HourDecimal * 3600*1000) * @RandNum   
        /*毫秒差值
        由于之前@MsPartDiff是两个时间小时之后的毫秒差值  
        @HourDecimal * 3600*1000 有小时的小数部分的毫秒差值不会大于小时
        毫秒不会溢出
        */
        Set @ReturnDateTime = DateAdd(hh,@HourDiff,@SmallDate)
        Set @ReturnDateTime = DateAdd(ms,@MsPartDiff,@ReturnDateTime)       
        Return @ReturnDateTime
    End
     
    --测试示例
    select dbo.RandDateTime(Rand(),'2011-03-21 00:00:00.000','2011-03-21 23:59:00.000')
    go 10
     
    --运行结果
    /*
    -----------------------
    2011-03-21 16:44:58.990
     
    (1 row(s) affected)
     
     
    -----------------------
    2011-03-21 00:00:33.313
     
    (1 row(s) affected)
     
     
    -----------------------
    2011-03-21 15:04:58.777
     
    (1 row(s) affected)
     
     
    -----------------------
    2011-03-21 06:32:21.347
     
    (1 row(s) affected)
     
     
    -----------------------
    2011-03-21 15:11:51.047
     
    (1 row(s) affected)
     
     
    -----------------------
    2011-03-21 14:39:23.597
     
    (1 row(s) affected)
     
     
    -----------------------
    2011-03-21 07:24:17.247
     
    (1 row(s) affected)
     
     
    -----------------------
    2011-03-21 06:15:49.653
     
    (1 row(s) affected)
     
     
    -----------------------
    2011-03-21 02:06:14.757
     
    (1 row(s) affected)
     
     
    -----------------------
    2011-03-21 10:49:18.370
     
    (1 row(s) affected)
    */
  • 相关阅读:
    linux nohup
    并发编程-多进程模块介绍
    并发编程-多进程
    网络编程-粘包现象
    Typora快捷键Mac
    网络编程
    异常处理
    面向对象-元类介绍
    面向对象-内置方法
    面向对象-反射
  • 原文地址:https://www.cnblogs.com/accumulater/p/6244704.html
Copyright © 2011-2022 走看看