从 MS SQL 的某个范围中获取随机值?
假设我的表可以包含从 000 到 999 的值(三位数字且小于 1000),
其中一些值已填充。假设当前我的表有
000,002,005,190 (001,004,003,006,..189,191,..,999 可以插入表中)
并且这些值是随机分配的 000 和 002 在表中,但 001 尚未在表中。
我怎样才能获得可以插入表中的值。
Let suppose my table can have values from 000 to 999 (three digits and less than 1000)
Some of this values are filled. Let's suppose currently my table has
000,002,005,190 (001,004,003,006,..189,191,..,999 can be inserted into table)
and these values are randomly allocated 000 and 002 is in table but 001 is not in table yet.
How can I get the values that I can insert into table yet.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
编辑
此查询的工作原理是从系统表 (
master.dbo.spt_values
) 生成可能数字的完整列表,该表保证在 CTE 内包含超过 1000 行<代码>rnCTE。将 -1 添加到ROW_NUMBER
中,使值从 0 而不是 1 开始。外部查询用零填充要显示的数字,仅返回源数据中不存在且小于 1000 的数字。
EDIT
This query works by generating the complete list of possible numbers from a system table (
master.dbo.spt_values
) which is guaranteed to contain more than 1000 rows inside the CTErnCTE
. -1 is added toROW_NUMBER
to have the values start at 0 rather than 1.The outer query zero pads the numbers for display, returning only those which are not in the source data and are less than 1000.
您必须编写 T-SQL 来首先查询并找到差距。没有现成的 SQL 可以直接为您提供差距。
You will have to write a T-SQL to first query and find the gaps. There is no ready made SQL that will give you the gaps directly.