【叶子函数分享四十五】返回两个时间范围内的一个随机时间
来源:互联网 发布:中天制片软件 编辑:程序博客网 时间:2024/05/16 05:33
/******************************
* 函数名: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)
*/
- 【叶子函数分享四十五】返回两个时间范围内的一个随机时间
- 【叶子函数分享四十五】返回两个时间范围内的一个随机时间
- 【叶子函数分享四十九】生成两个时间之间的所有日期
- 【叶子函数分享四十九】生成两个时间之间的所有日期
- 在一个范围内获取随机时间
- java生成某个范围内的随机时间
- mysql取某个范围内的随机时间
- 获取两个时间之间的随机时间
- 【叶子函数分享十一】取汉字首字母的两个函数
- 【叶子函数分享十一】取汉字首字母的两个函数
- 返回两个日期间的时间列表的函数
- DateDiff 函数返回两个日期之间的时间间隔
- QDataTime返回一个字符串的日期时间函数
- 判断开始时间是否在终点时间的两个月范围内
- C#遍历时间范围内所有的时间
- 判断时间在不在某两个时间范围内
- 随机产生时间的SQL函数
- SQL Server中循环插入一定时间范围内的随机日期值
- 数据库中查找两个日期之间的数据
- 协整理论和面板数据分析
- IOS总结_实现UIButton的图文混排(二)
- Xcode6的新特性、iPhone6和iPhone6Plus的适配
- Python的Tornado框架的REST支持方案
- 【叶子函数分享四十五】返回两个时间范围内的一个随机时间
- Launcher 在配置文件中配置桌面快捷方式->代码分析
- springmvc+maven+sitemesh+bootstrap
- windows程序设计之绘图基础之GDI原理
- 【叶子函数分享四十四】全角半角转换函数
- Android(开发):发送短信
- cannot allocate an object of abstract type
- android之permission和user-permission的使用
- android2.3进入安全模式