我是一个相当新的SQL,我希望有一个列,将生成5个唯一的数字.很像id列,除了我希望得到5个随机顺序的数字并且对于该列是唯一的
例:
56829
73591
17469
46290
Run Code Online (Sandbox Code Playgroud)
我有一个自动增量和唯一的id列,但现在我需要另一个独特的列,并将生成5位数,我有点看着这个,显然有一个uniqueidentifier列类型,我有相关的文档,但我不确定它是不是我要找的......请帮忙!
也许伪随机数就足够了.你可以这样做:
alter table t
add id5 as ( (id * 19379 + 62327) % 99991)
Run Code Online (Sandbox Code Playgroud)
数字只是小于100,000的任意素数.因为它们是素数,所以数字不应重复1到99991之间的值.
编辑:
对于素数来说,这很容易证明.假设id1和id2具有相同的值:
(id1 * 19379 + 62327) % 99991) = n
(id2 * 19379 + 62327) % 99991) = n
Run Code Online (Sandbox Code Playgroud)
然后减去它们:
(id1 - id2) * 19379 % 99991 = 0
Run Code Online (Sandbox Code Playgroud)
不可否认,此时你需要一些数论.但是,只要说两个素数(19,379和99,991)没有共同的除数就足够了.因此,唯一id1 - id2可行的方法是何时是99,991的倍数.
(从技术上讲,你可以做的是除以19,379,因为它的逆是明确定义的.反函数在模运算中并不总是很明确,但是当它们被除法时是允许的.)
后一种情况是说这些数字不重复的奇特方式.
编辑:
如果您想要5位数,那么您可以使用% 89989并向结果中添加10,000.