现在的位置: 首页 > 综合 > 正文

[SQL Server] 随机与近似函数

2012年09月14日 ⁄ 综合 ⁄ 共 1635字 ⁄ 字号 评论关闭

NEWID()

从A表随机取10条记录,用  

   SELECT TOP 10 * FROM Northwind.dbo.Orders

        ORDER BY NEWID();

或者

   SELECT TOP 10 *,NEWID() AS Random FROM Northwind.dbo.Orders

        ORDER BY Random;

在SSMS中可以看到它们的执行计划是一样的

QQ截图未命名

 

示例:

A. 对变量使用 NEWID 函数
DECLARE @myid uniqueidentifier
SET @myid = NEWID()
PRINT 'Value of @myid is: '+ CONVERT(varchar(255), @myid)

结果:  

       Value of @myid is: 6F9619FF-8B86-D011-B42D-00C04FC964FF

B. 在 CREATE TABLE 语句中使用 NEWID

CREATE TABLE cust
(
	CustomerID uniqueidentifier NOT NULL
		DEFAULT newid(),
	Company varchar(30) NOT NULL,
	ContactName varchar(60) NOT NULL, 
	[Address] varchar(30) NOT NULL
)
GO

INSERT cust
(
	CustomerID, 
	Company, 
	ContactName, 
	[ADDRESS]
)
VALUES
(
	NEWID(), 
	'Wartian Herkku', 
	'Pirkko Koskitalo', 
	'Torikatu 38'
)

RAND()

返回一个介于 0 到 1(不包括 0 和 1)之间的伪随机 float 值。

语法

    RAND ( [ seed ] )  
参数
seed  : 提供种子值的整数表达式(tinyintsmallintint)。如果未指定 seed,则数据库引擎随机分配种子值。对于指定的种子值,返回的结果始终相同。
示例:
    SELECT RAND(),返回类似的随机小数:0.36361513486289558
 

CEILING()

返回大于或等于指定数值表达式的最小整数。

语法:

   CEILING ( numeric_expression )
参数
numeric_expression 是精确数字或近似数字数据类型类别(bit 数据类型除外)的表达式。
示例:显示使用 CEILING 函数的正数、负数和零值。
     SELECT CEILING($123.45), CEILING($-123.45), CEILING($0.0)
结果:
--------- --------- ------------------------- 
124.00    -123.00    0.00                     

(1 row(s) affected)

FLOOR()

返回小于或等于指定数值表达式的最大整数。

语法

    FLOOR ( numeric_expression )
参数
numeric_expression 精确数字或近似数字数据类型类别(bit 数据类型除外)的表达式。

示例: 显示正数、负数和货币值在 FLOOR 函数中的运用。

    FLOOR ( numeric_expression )

结果:

    SELECT FLOOR(123.45), FLOOR(-123.45), FLOOR($123.45)
    ---------      ---------     -----------
    123            -124          123.0000

如何生成随机整数呢?

1.

    A:select floor(rand()*N) ---12.0

    B:select cast( floor(rand()*N) as int) ---12

2.

    A:select ceiling(rand() * N) ---12.0

    B:select cast(ceiling(rand() * N) as int) ---12

方法1的数字范围:0至N-1之间,如cast( floor(rand()*100) as int) 会生成0至99之间任一整数

方法2的数字范围:1至N之间,如cast(ceiling(rand() * 100) as int) 会生成1至100之间任一整数

抱歉!评论已关闭.