SQL - 唯一列5个随机数字

use*_*331 0 sql sql-server

我是一个相当新的SQL,我希望有一个列,将生成5个唯一的数字.很像id列,除了我希望得到5个随机顺序的数字并且对于该列是唯一的

例:

56829
73591
17469
46290
Run Code Online (Sandbox Code Playgroud)

我有一个自动增量和唯一的id列,但现在我需要另一个独特的列,并将生成5位数,我有点看着这个,显然有一个uniqueidentifier列类型,我有相关的文档,但我不确定它是不是我要找的......请帮忙!

Gor*_*off 5

也许伪随机数就足够了.你可以这样做:

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.

  • 有几天我觉得我的能力相当不错......然后我看到这样的事情......现实很糟糕. (2认同)