仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 640|回复: 8
打印 上一主题 下一主题

[学习教程] 在sql server数据库中取指定局限内的随机日期示例

[复制链接]
兰色精灵 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:07:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
BlackHole黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继在该章这前,我们必需先懂得数字与日期之间的转换划定规矩。
大概另有良多的伴侣还不分明乃至还不晓得数字与日期之间可以互相转换。我们先来看一个示例:
selectconvert(float,convert(datetime,2008-1-1))

该sql会报错吗?日期格局的值能转换为数字吗?谜底是固然能够的,以上sql前往了局39446。那末,为何是这个了局呢?我们再来看一个sql.
selectdateadd(d,39446,1900-01-01)

前往了局2008-01-0100:00:00.000,再看一个示例:
selectconvert(datetime,39446)

前往了局2008-01-0100:00:00.000

呵呵,从下面的示例了局中信任人人已看分明了,在sqlserver中日期与数字之间的转换,就是前往从1900-01-01入手下手到转化的日期之间的天数。反过去,从数字转换成日期,就是前往1900-01-01加上转化数字的天数后的日期

分明了这个划定规矩,我们就入手下手明天的示例了:在sqlserver数据库中取指定局限内的随机日期
示比方下:
CreateFUNCTION[dbo].[udf_GetRandomDatetime]
(
@MinValuedatetime=null,
@MaxValuedatetime=null
)
RETURNSdatetime
AS
/*
函数称号:udf_GetRandomDatetime
功效简述:取随机日期
相干工具:无
参数:@MinValueDecimal最小值
@MaxValueDecimal最年夜值
*/
BEGIN       
declare@RandomValuefloat
declare@ReturnValueDecimalDatetime
declare@MinValueDecimaldecimal
declare@MaxValueDecimaldecimal

--取最小日期对应的数值
if@MinValueisnotnull
        begin
        select@MinValueDecimal=convert(float,@MinValue)
        end
--取最年夜日期对应的数值
if@MaxValueisnotnull
        begin
        select@MaxValueDecimal=convert(float,@MaxValue)
        end

while(1=1)
        begin
        --从随机数视图中猎取一个随机值(函数中不克不及间接利用rand())
        select@RandomValue=RandValue
        fromV_Rand
        --依据最年夜最小值猎取随机整数
        if@MinValueDecimalisnotnulland@MaxValueDecimalisnotnull
begin
select@ReturnValueDecimal=@RandomValue*@MaxValueDecimal
if@ReturnValueDecimal>=@MinValueDecimaland@ReturnValueDecimal<=@MaxValueDecimal
begin
break
end
end
        elseif@MinValueDecimalisnotnulland@MaxValueDecimalisnull
begin
select@ReturnValueDecimal=@RandomValue*@MinValueDecimal
if@ReturnValueDecimal>=@MinValueDecimal
begin
break
end
end
        elseif@MinValueDecimalisnulland@MaxValueDecimalisnotnull
begin
select@ReturnValueDecimal=@RandomValue*@MaxValueDecimal
if@ReturnValueDecimal<=@MaxValueDecimal
begin
break
end
end
        elseif@MinValueDecimalisnulland@MaxValueDecimalisnull
begin
select@ReturnValueDecimal=@RandomValue
break
end
        end

returnconvert(datetime,@ReturnValueDecimal)

END


注重:与上一章一样的情形,该示例中必要用到Rand()函数,但又由于在自界说函数中不克不及利用Rand函数,以是我们创立了V_Rand视图来办理该成绩,详细请看上一章:在sqlserver数据库中取指定局限内的随机整数示例

实行sql,自界说函数创立乐成,我们再来挪用函数看一下了局吧:
selectdbo.udf_GetRandomDatetime(2008-1-1,2010-12-1)

实行下面的sql,它是否是老是前往2008-1-1与2010-12-1之间的日期值呢?限制,如果WHERE子句的查询条件里有不等号(WHEREcoloum!=),MySQL将无法使用索引。类似地,如果WHERE子句的查询条件里使用了函数(WHEREDAY(column)=),MySQL也将无法使用索引。
小妖女 该用户已被删除
沙发
发表于 2015-1-18 12:01:59 | 只看该作者
多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油
只想知道 该用户已被删除
板凳
发表于 2015-1-25 10:57:29 来自手机 | 只看该作者
原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!
admin 该用户已被删除
地板
发表于 2015-2-2 21:55:39 | 只看该作者
varchar(max)\\\\nvarchar(max)类型的引入大大的提高了编程的效率,可以使用字符串函数对CLOB类型进行操作,这是一个亮点。
谁可相欹 该用户已被删除
5#
发表于 2015-2-8 08:36:48 | 只看该作者
你可以简单地认为适合的就是好,不适合就是不好。
海妖 该用户已被删除
6#
发表于 2015-2-25 05:59:16 | 只看该作者
连做梦都在想页面结构是怎么样的,绝非虚言
分手快乐 该用户已被删除
7#
发表于 2015-3-7 18:32:00 | 只看该作者
大侠们有推荐的书籍和学习方法写下吧。
乐观 该用户已被删除
8#
发表于 2015-3-15 11:48:10 | 只看该作者
呵呵,这就是偶想说的
透明 该用户已被删除
9#
发表于 2015-3-22 01:10:35 | 只看该作者
然后最好有实践机会,能够把实践到的和实践结合起来,其实理论思考是个非常困扰和痛苦的事情
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-1 13:38

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表