SQL随机数用户定义函数
问题描述:
我希望有人能帮助我。SQL随机数用户定义函数
我一个尝试使用SQL用户定义的函数MS Server 2008上做以下
我想预测当客户将离开该银行,但我是系列硬币投掷的这样做直到你离开。投币式投注不一定总是在50/50,所以我可以将概率作为参数传递给当前客户的任期。
问题是,它不允许在函数内使用RAND(),我不明白为什么,但那很好,一定有一个原因。
这里是我的功能:
create function NewTenure (@tenure integer, @p float)
returns integer
as
begin
declare @r float
declare @newten int
declare @attrite binary
set @attrite=0
set @newten = @tenure
set @r = RAND()
while (@attrite = 0)
begin
if (@r <= @p) set @attrite = 1;
if (@r > @p) set @newten = @newten+1
end
return(@newten)
end
在我看来,我需要生成0-1之间的随机值,这样我就可以把它比作概率来确定是否离开与否的客户。如果不允许使用RAND(),那么在函数内部生成一个SQL技巧? (我从很多年前的学校就知道我可以编写自己的随机数发生器,但我不想这样做,也不相信我应该这样做,随机数是一个基本的计算机功能,人们应该期望 - 我曾经使用过的任何其他语言都有一个)
我打算在新查询中调用该函数,以便在他们离开时更新具有预计任职期限的临时表,然后将其用于其他复杂计算。
答
这是一个肮脏的伎俩。
CREATE VIEW dbo.vRand
AS
SELECT r = RAND();
GO
CREATE FUNCTION dbo.fRand()
RETURNS DECIMAL(10,9)
AS
BEGIN
RETURN (SELECT r FROM dbo.vRand);
END
GO
SELECT name, dbo.fRand()
FROM sys.all_objects;
非常感谢,这工作。 – user1617979