SQL Server中的RAND函数的介绍和区间随机数值函数的实现
CHECKSUM ( * | expression [ ,...n ] ) 此函数生成按照表的某一行或一组表达式计算出来的int校验和值,CHECKSUM 用于生成哈希索引(详细说明查看https://technet.microsoft.com/zh-cn/library/ms189788(v=sql.90).aspx)。


IF OBJECT_ID(N'dbo.vRandomGuid', 'V') IS NOT NULL
BEGIN
DROP VIEW dbo.vRandomGuid;
END
GO --==================================
-- 功能: 随机Guid视图
-- 说明: 具体实现阐述
-- 作者: XXX
-- 创建: yyyy-MM-dd
-- 修改: yyyy-MM-dd XXX 修改内容描述
--==================================
CREATE VIEW dbo.vRandomGuid
--$Encode$--
AS
SELECT RandomGuid = NEWID();
GO 调用该视图的T-SQL代码如下:
SELECT TOP RandomGuid
FROM dbo.vRandomGuid;
GO
执行后的查询结果如下:


IF OBJECT_ID(N'dbo.ufn_RandNum', 'FN') IS NOT NULL
BEGIN
DROP FUNCTION dbo.ufn_RandNum;
END
GO --==================================
-- 功能: 获取区间内的任意一个随机数值
-- 说明: 具体实现阐述
-- 作者: XXX
-- 创建: yyyy-MM-dd
-- 修改: yyyy-MM-dd XXX 修改内容描述
-- 调用: SELECT dbo.ufn_RandNum(, );
--==================================
CREATE FUNCTION dbo.ufn_RandNum
(
@intMin INT, -- 随机数值的最小值
@intMax INT -- 随机数值的最大值
) RETURNS INT
--$Encode$--
AS
BEGIN
SET @intMin = ISNULL(@intMin, );
SET @intMax = ISNULL(@intMax, ); DECLARE @guidValue AS UNIQUEIDENTIFIER; SELECT TOP @guidValue = RandomGuid
FROM dbo.vRandomGuid; RETURN ABS(CHECKSUM(@guidValue)) % (@intMax - @intMin + ) + @intMin;
END
GO
SELECT dbo.ufn_RandNum(, ) AS RandNum, dbo.ufn_RandNum(, ) AS RandNum2;
GO


IF OBJECT_ID(N'dbo.ufn_RandDate', 'FN') IS NOT NULL
BEGIN
DROP FUNCTION dbo.ufn_RandDate;
END
GO --==================================
-- 功能: 获取日期区间内的任意一个随机日期
-- 说明: 具体实现阐述
-- 作者: XXX
-- 创建: yyyy-MM-dd
-- 修改: yyyy-MM-dd XXX 修改内容描述
-- 调用: SELECT @dtmRand = dbo.ufn_RandDate('2007-02-01', '2007-03-01');
--==================================
CREATE FUNCTION dbo.ufn_RandDate
(
@dtmMin DATETIME, -- 随机日期的最小值
@dtmMax DATETIME -- 随机日期的最大值
) RETURNS DATETIME
--$Encode$--
AS
BEGIN
SET @dtmMin = ISNULL(@dtmMin, '2000-01-01');
SET @dtmMax = ISNULL(@dtmMax, '2000-01-01');
DECLARE @guidVue AS UNIQUEIDENTIFIER; SELECT TOP @guidVue = RandomGuid
FROM dbo.vRandomGuid; -- 可以将HOUR换为DAYS
RETURN DATEADD(HOUR, (ABS(CHECKSUM(@guidVue)) % ( + DATEDIFF(HOUR, @dtmMax, @dtmMin))), @dtmMin);
END
GO
SELECT dbo.ufn_RandDate('2015-12-01', '2015-12-21') AS RandDate, dbo.ufn_RandDate('2016-12-01', '2016-12-21') AS RandDate2;
GO
执行后的查询结果如下:


SELECT TOP Num
FROM dbo.SeqDataTable
WHERE Num BETWEEN @intMin AND @intMax
ORDER BY NEWID() ASC;
GO
当然也可以利用以上的数字序列SeqDataTable(Num INT),日期区间[@dtmMin,@dtmMax],那个该数字区间任意一个随机日期的T-SQL代码如下:
SELECT TOP DATEADD(DAY, Num, @dtmMin)
FROM dbo.SeqDataTable
WHERE Num BETWEEN AND DATEDIFF(DAY, @dtmMin, @dtmMax)
ORDER BY NEWID() ASC;
GO
注意:以上代码无法执行成功的,也算是伪代码的。
SELECT TOP Num
FROM dbo.ufn_GetNums(@bintMin, @bintMax)
ORDER BY NEWID() ASC;
GO SELECT TOP Num
FROM dbo.ufn_GetNums(, )
ORDER BY NEWID() ASC;
GO
获取指定范围的任意一个日期的T-SQL代码如下:
SELECT TOP DATEADD(DAY, Num, @dtmMin)
FROM dbo.ufn_GetNums(, DATEDIFF(DAY, @dtmMax, @dtmMin))
ORDER BY NEWID() ASC;
GO SELECT TOP DATEADD(DAY, Num, '2015-12-01')
FROM dbo.ufn_GetNums(, DATEDIFF(DAY, '2015-12-01', '2015-12-05'))
ORDER BY NEWID() ASC;
GO
以上代码中的表函数ufn_GetNums可以参看这篇博文SQL Server数字辅助表的实现
SQL Server中的RAND函数的介绍和区间随机数值函数的实现的更多相关文章
- ylb:SQL Server中的时间函数
ylbtech-SQL Server:SQL Server-SQL Server中的时间函数 SQL Server中的时间函数. 1,SQL Server中的时间函数 返回顶部 1. 当前系统日期 ...
- SQL Server中的DATEPART函数的使用
下面文章来自:http://blog.csdn.net/hello_world_wusu/article/details/4632049 定义和用法 DATEPART() 函数用于返回日期/时间的单独 ...
- SQL Server中建立自定义函数
在SQL Server中用户可以自定义函数,像内置函数一样返回标量值,也可以将结果集用表格变量返回.用户自定义函数的2种类型:1.标量函数:返回一个标量值:2.表格值函数{内联表格值函数.多表格值函数 ...
- SQL Server中追踪器Trace的介绍和简单使用
一.What is Trace? 对于SQL Profiler这个工具相信大家都不是很陌生,没用过的朋友可以在SQL Server Management Studio>工具>SQL Ser ...
- SQL Server中存储过程与函数的区别
本质上没区别.只是函数有如:只能返回一个变量的限制.而存储过程可以返回多个.而函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行.执行的本质都一样. 函数限制比较多,比如不能用临 ...
- SQL SERVER 中的 object_id()函数
在SQLServer数据库中,如果查询数据库中是否存在指定名称的索引或者外键约束等,经常会用到object_id('name','type')方法,做笔记如下: ? 语法:object_id('obj ...
- SQL Server中使用表值函数
函数有很多限制,不能使用动态语句,不能使用临时表等等...细看一下,直接写语句就行了,不用动态语句 insert into @re select id,parid,@I from videoclass ...
- SQL Server中,with as使用介绍
一.WITH AS的含义 WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到.有的时候 ...
- sql server中的开窗函数over、视图、事物
一.开窗函数over的作用有两个: 1.排序order by,row_number,翻页 2.划区partition by,结合聚合函数针对某部分数据进行汇总 翻页的sql server 语句: an ...
随机推荐
- 内存只有4G的MBP要怎么破
开发工具包括浏览器都是极占内存的,没有个8G根本不行啊. 怎一个慢字了得? 补记: 放弃谷歌浏览器是正道
- sina sae开发中出现的问题
都是些小问题,但既然出现了,下次就该避免! 网站加载速度慢: 1.安装 Disable Google Fonts 字体插件即可 2.删代码 http://jingyan.baidu.com/arti ...
- Scalaz(25)- Monad: Monad Transformer-叠加Monad效果
中间插播了几篇scalaz数据类型,现在又要回到Monad专题.因为FP的特征就是Monad式编程(Monadic programming),所以必须充分理解认识Monad.熟练掌握Monad运用.曾 ...
- apache maven pom setting
<?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apache Soft ...
- JAVA中的GC机制详解
优秀Java程序员必须了解的GC工作原理 一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只 ...
- ADO.NET操作数据库(一)
---恢复内容开始--- [1]ADO.Net简介2015-12-07-20:16:05 ADO.Net提供对Microsoft SQL Server数据源以及通过OLE DB和XML公开的数据源的一 ...
- BOOtstrap源码分析之 tooltip、popover
一.tooltip(提示框) 源码文件: Tooltip.jsTooltip.scss 实现原理: 1.获取当前要显示tooltip的元素的定位信息(top.left.bottom.right.wid ...
- babel 无法解析jsx (webpack react )
webpack.config.js的配置如下图: 报错: 修改webpack.config.js文件,如下即可:
- windows.open()、close()方法详解
windows.open()方法详解: window.open(URL,name,features,replace)用于载入指定的URL到新的或已存在的窗口中,并返回代表新窗口的Win ...
- 总结CSS3新特性(Transition篇)
CSS 过渡(transition), 是 CSS3 规范的一部分, 用来控制 CSS 属性的变化速率. 可以让属性的变化过程持续一段时间,而不是立即生效.比如,将元素的颜色从白色改为黑色,通常这个改 ...