在sql server中的某个位置随机化数值

时间:2014-07-21 00:53:22

标签: sql sql-server substring

我在表格中有一个NVCHAR(30)列,我需要将具有特定开始和结束位置的数值随机化,并且该列包含不同格式的数值。

示例
值类型1

337-27636993-219322

值类型2

01121041303803168640

对于盒子类型,我需要随机化从位置5开始到结束于位置12的值,因此通过示例提供以下数字是我期望随机化的。

27636993
10413038

我知道如何做一个子字符串来查找起始位置和长度但是只提取出我要随机化的值。我需要的是sql代码来选择我需要的值集,随机化它们然后对现有数字进行更新。

所以如果原始数字如下;

337-27636993-219322

,生成的新号码是;

56413037

表中的最终结果是;

337-56413037-219322

我对SQL很有信心,但我不是大师,所以所有的帮助都会受到赞赏

1 个答案:

答案 0 :(得分:4)

您想使用stuff()和随机数生成器。这样的事情应该有效:

SELECT Stuff(col, 5, 8, RIGHT(Replicate('0', 8) 
                              + Cast(Cast(Rand(Checksum(Newid()))*100000000 AS 
                              INT) AS 
                                     VARCHAR(255)), 8)) 

这个想法很简单。 stuff()将替换字符串中的字符,这正是您想要做的。将随机数生成为字符串有点工作。

  • rand(checksum(newid()))生成随机数
  • rand(checksum(newid()))* 100000000创建一个8位数字(带小数点)
  • 然后将其转换为一个整数(大到足以存储此表达式)
  • 然后将其转换为字符串
  • '0'为前缀,因此如果它少于8个字符,则会被填充
  • 然后使用right()获取8位数字