SQL rand()函数

zhang1you2huan 2010-07-25 10:24:45
SQL使用随机数算法,在开户时自动产生18位随机卡号,怎样用存储过程实现?怎样自动产生18位随机卡号?
...全文
153 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhang1you2huan 2010-08-01
  • 打赏
  • 举报
回复

详解见下方:
产生随机卡号的存储过程(一般用当前月份数\当前秒数\当前毫秒数乘以一定的系数作为随机种子)
create procedure proc_randCardID @randCardID char(19) OUTPUT
AS
DECLARE @r numeric(15,8)
DECLARE @tempStr char(10)
SELECT @r=RAND((DATEPART(mm, GETDATE()) * 100000 )+ (DATEPART(ss, GETDATE()) * 1000 )
+ DATEPART(ms, GETDATE()) )
set @tempStr=convert(char(10),@r) --产生0.xxxxxxxx的数字,我们需要小数点后的八位数字
set @randCardID='1010 3576 '+SUBSTRING(@tempStr,3,4)+' '+SUBSTRING(@tempStr,7,4) --组合为规定格式的卡号
GO
--测试产生随机卡号
DECLARE @mycardID char(19)
EXECUTE proc_randCardID @mycardID OUTPUT
print '产生的随机卡号为:'+@mycardID
GO
hokor 2010-07-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ldslove 的回复:]
哈希。。
[/Quote]
等待详解。。
zhang1you2huan 2010-07-27
  • 打赏
  • 举报
回复
O(∩_∩)O谢谢!可是产生了重复的卡号怎么办呢,虽然这样的概率是很小。
永生天地 2010-07-25
  • 打赏
  • 举报
回复

select convert(numeric(18,0),rand()*1000000000000000000)
jason成都 2010-07-25
  • 打赏
  • 举报
回复
可以一次产生1个,然后转为字符。18次字符组合。也可以一次产生18位的数字,但是太大了。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧