欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » SQLServer教程 » 正文

热门阅读

在sql server数据库中取指定范围内的随机日期示例

创建时间:2012年04月20日 14:54  阅读次数:(7087)
分享到:
在该章这前,我们必须先了解数字与日期之间的转换规则。
可能还有很多的朋友还不清楚甚至还不知道数字与日期之间能够相互转换。我们先来看一个示例:
select convert(float,convert(datetime,'2008-1-1'))

该sql会报错吗?日期格式的值能转换为数字吗?答案是当然可以的,以上sql返回结果39446。那么,为什么是这个结果呢?我们再来看一个sql.
select dateadd(d,39446,'1900-01-01')

返回结果2008-01-01 00:00:00.000,再看一个示例:
select convert(datetime,39446)

返回结果2008-01-01 00:00:00.000

呵呵,从上面的示例结果中相信大家已经看明白了,在sql server中日期与数字之间的转换,就是返回从1900-01-01开始到转化的日期之间的天数。反过来,从数字转换成日期,就是返回1900-01-01加上转化数字的天数后的日期

明白了这个规则,我们就开始今天的示例了:在sql server数据库中取指定范围内的随机日期
示例如下:
Create FUNCTION [dbo].[udf_GetRandomDatetime]
(
@MinValue datetime = null,
@MaxValue datetime = null
)
RETURNS datetime
AS
/*
函数名称:udf_GetRandomDatetime
功能简述:取随机日期
相关对象:无
参数:@MinValueDecimal 最小值
@MaxValueDecimal 最大值
*/
BEGIN
declare @RandomValue float
declare @ReturnValueDecimal Datetime
declare @MinValueDecimal decimal
declare @MaxValueDecimal decimal

--取最小日期对应的数值
if @MinValue is not null
begin
select @MinValueDecimal = convert(float,@MinValue)
end
--取最大日期对应的数值
if @MaxValue is not null
begin
select @MaxValueDecimal = convert(float,@MaxValue)
end

while(1=1)
begin
--从随机数视图中获取一个随机值(函数中不能直接使用rand())
select @RandomValue = RandValue
from V_Rand
--根据最大最小值获取随机整数
if @MinValueDecimal is not null and @MaxValueDecimal is not null
begin
select @ReturnValueDecimal = @RandomValue * @MaxValueDecimal
if  @ReturnValueDecimal  >= @MinValueDecimal and @ReturnValueDecimal <= @MaxValueDecimal
begin
break
end
end
else if @MinValueDecimal is not null and @MaxValueDecimal is null
begin
select @ReturnValueDecimal = @RandomValue * @MinValueDecimal
if  @ReturnValueDecimal  >= @MinValueDecimal
begin
break
end
end
else if @MinValueDecimal is null and @MaxValueDecimal is not null
begin
select @ReturnValueDecimal = @RandomValue * @MaxValueDecimal
if  @ReturnValueDecimal <= @MaxValueDecimal
begin
break
end
end
else if @MinValueDecimal is null and @MaxValueDecimal is null
begin
select @ReturnValueDecimal = @RandomValue
break
end
end

return convert(datetime,@ReturnValueDecimal)

END


注意:与上一章一样的情况,该示例中需要用到Rand()函数,但又因为在自定义函数中不能使用Rand函数,所以我们创建了V_Rand视图来解决该问题,具体请看上一章:在sql server数据库中取指定范围内的随机整数示例

执行sql,自定义函数创建成功,我们再来调用函数看一下结果吧:
select dbo.udf_GetRandomDatetime('2008-1-1','2010-12-1')

执行上面的sql,它是不是总是返回2008-1-1与2010-12-1之间的日期值呢?
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论1条
  • #1楼  评论人:匿名  评论时间:2012-4-20 19:46:47
  • 谢谢楼主了
发表评论:
留言人:
内  容:
请输入问题 58+73=? 的结果(结果是:131)
结  果: