【问题标题】:add to the sql table random number添加到sql表中的随机数
【发布时间】:2015-12-08 09:56:42
【问题描述】:

我有一张有 4 列的表格

-----------------------
|data1|data2|data3|key|
-----------------------
|d1   | d2  | d3  | k1|
-----------------------
|d3   |d4   | d5  | k2|
-----------------------
|d6   | d7  | d8  | k1|
-----------------------
|d9   |d10  | d11 | k2|
-----------------------

我需要基于这个具有相同列 + id 的新表生成一个新表。 Id 应该是随机的 int64。相同的密钥应该具有相同的 id 例如上表可能是:

----------------------------
|data1|data2|data3|key| id |
----------------------------
|d1   | d2  | d3  | k1|1234|
---------------------------
|d3   |d4   | d5  | k2|5678|
----------------------------
|d6   | d7  | d8  | k1|1234|
----------------------------
|d9   |d10  | d11 | k2|5678|
----------------------------

我会很高兴得到建议

更新

GUID 是 128 位,我需要 64 位。我支持IRAND

【问题讨论】:

  • 您使用的是哪个 dbms?也许它支持 IRAND 或 RAND?
  • 它是一个键(这意味着唯一性),还是随机的(这意味着它可能会重复?)你能给我们一些背景,说明你为什么要这样做,以及为什么像GUID 或哈希不是更合适吗? (是的,正如@jarlh 所说,在做这种不寻常的事情时,您可能需要特定 RDBMS 的自定义功能,那么您使用的是什么系统?)
  • @jalh, @Matt Gibson 请看问题

标签: sql random


【解决方案1】:

试试这个, 它会给出一个随机数。 您可以使用concat 作为您的解决方案。

select  ABS(CHECKSUM(NewId())) 

【讨论】:

    【解决方案2】:

    又快又脏:

    SELECT S.*, I.`id`
    FROM `Table1` AS S
       INNER JOIN (
          SELECT `key`, ROUND((POW(2,63)-1) * RAND()) AS id
          FROM
            (SELECT DISTINCT `key`
             FROM `Table1`) AS lKeys 
       ) AS I ON S.`key` = I.`key`
    

    【讨论】:

      猜你喜欢
      • 2013-09-24
      • 1970-01-01
      • 2015-10-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 2019-05-25
      • 2014-08-15
      • 2019-02-27
      相关资源
      最近更新 更多