我想在一个名为accounts的表中插入数据,其中一个字段必须有一个随机数,从11开始,长度为9位,例如112345673或119876543。这可以通过SQL还是我必须在PHP中做到这一点然后插入那里?
问问题
426 次
6 回答
3
如果您一次插入一行...
--INSERT dbo.table(column1, random_column)
SELECT 'column1_value',
'11' + RIGHT(REPLACE(CONVERT(VARCHAR(12), RAND()), '.', ''), 3)
+ RIGHT(REPLACE(CONVERT(VARCHAR(12), RAND()), '.', ''), 4);
如果这是多行 SELECT 的一部分,您将看到分配给每一行的相同数字,因此您需要根据每行中的其他数据进行随机化(或使用NEWID()
康拉德指出的),例如
--INSERT dbo.table(column1, random_column)
SELECT name, '11' + RIGHT(1000000 + ABS(CONVERT(BIGINT,
CONVERT(VARBINARY(16), NEWID()))), 7)
FROM sys.all_objects;
(我已经注释掉了,INSERT
所以你可以独立测试结果。)
于 2012-06-06T22:13:34.607 回答
3
也许这过于简单,但110000000 + (ABS(CHECKSUM(NEWID())) % 10000000)
会是一种非常轻量级的方式来产生你想要的东西。
所以
ALTER TABLE mySchema.myTable ADD CONSTRAINT DF_myColumn
DEFAULT 110000000 + (ABS(CHECKSUM(NEWID())) % 10000000) FOR myColumn
于 2012-06-06T22:39:56.250 回答
3
这会给你一个 11 位的随机数。如果随机数短于 9 位,则以 0 为前缀,因此总长度始终为 11:
select '11' + right('11000000000' +
cast(abs(convert(bigint,convert(varbinary(8),newid()))) as varchar(20)), 9)
于 2012-06-06T22:19:31.727 回答
1
使用 PHP。
$randnum = "11".rand(1000000, 9999999);
然后只需将其插入查询中,瞧。
于 2012-06-06T22:12:38.227 回答
0
我会尝试:
SELECT '11'+REPLACE(STR(RAND(),9,7),'0.','')
...或这种轻微的变化...
SELECT '11'+RIGHT(STR(RAND(),9,7),7)
...以更快的速度证明。
于 2012-06-07T01:23:20.167 回答
0
可能但不是很好的表现。尝试这个。
insert into table2(randomNumberColumn)
select convert(bigint,'11' + convert(varchar(100),convert(bigint,right(convert(varchar(100),abs(convert(int,convert(varbinary(16),newid())))),7)))) as a
from table1
一个问题是它不能保证 11 位的长度。有时由于数量少,它会是 10。当随机数生成器提出一个小数字时,还没有真正研究如何填写额外的 0。
于 2012-06-06T22:12:01.643 回答