sql - 在 SQL Server 中生成稳定的随机数
问题描述
我在 SQL Server 2012 中工作。我正在清理数据,并试图随机打破地址分配算法中的联系。这需要我生成随机数。这个答案采用的方法不起作用,因为 WITH 子查询似乎重新生成了连接的每一侧,从而导致同一行的随机数不同。
这段代码复制了这个问题:
WITH
initial_table AS (
SELECT 1 AS id
),
random_values_added AS (
SELECT id, ABS(CHECKSUM(NEWID())) % 10 AS rand
FROM initial_table
)
SELECT t1.id, t2,id, t1.rand, t2.rand
FROM random_values_added t1 FULL OUTER JOIN random_values_added t2
ON t1.id = t2.id AND t1.rand = t2.rand
解决方案
您可以使用一个技巧使用rand()
. 假设这id
是独一无二的,您可以从以下内容开始:
WITH initial_table AS (
SELECT 1 AS id
),
random_values_added AS (
SELECT id, FLOOR(RAND(id) * 10) AS rand
FROM initial_table
)
这并不完全令人满意,因为每次运行代码时它都会返回相同的值。getdate()
为此,我们可以使用每个查询评估一次的事实:
WITH initial_table AS (
SELECT 1 AS id
),
random_values_added AS (
SELECT id, FLOOR(RAND(DATEADD(second, id, GETDATE()) * 10) AS rand
FROM initial_table
)
推荐阅读
- regex - 带有可选结束字符的 PCRE2 正则表达式始终匹配可选结束字符
- python - API Router Depends 与 Depend() 不兼容
- java - Jhipster 使用 Websocket 和 Vue 构建,不进行身份验证或登录
- php - 如何区分 Octobercms 后端表单中的关系
- postgresql - 如何在 Postgresql 的选择中重新映射数组列值?
- scala - 根据spark scala中完整df的列值设置列值
- vue.js - 当vue router-link完成导航时如何运行回调
- xml - 什么 .NET 类和方法可用于替换 XML 中的单引号和双引号以及其他特殊字符?
- python - 如何使用 tkinter 制作带有框架的标签?
- tensorflow - TensorFlow Object Detection API 量化,输出张量为 TFLite_Detection_PostProcess