我在表格中有一个NVCHAR(30)列,我需要将具有特定开始和结束位置的数值随机化,并且该列包含不同格式的数值。
示例
值类型1
337-27636993-219322
值类型2
01121041303803168640
对于盒子类型,我需要随机化从位置5开始到结束于位置12的值,因此通过示例提供以下数字是我期望随机化的。
27636993
10413038
我知道如何做一个子字符串来查找起始位置和长度但是只提取出我要随机化的值。我需要的是sql代码来选择我需要的值集,随机化它们然后对现有数字进行更新。
所以如果原始数字如下;
337-27636993-219322
,生成的新号码是;
56413037
表中的最终结果是;
337-56413037-219322
我对SQL很有信心,但我不是大师,所以所有的帮助都会受到赞赏
答案 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()
将替换字符串中的字符,这正是您想要做的。将随机数生成为字符串有点工作。
'0'
为前缀,因此如果它少于8个字符,则会被填充right()
获取8位数字