0

アカウントと呼ばれるテーブルにデータを挿入したいのですが、フィールドの1つに11から始まり、9桁の長さの乱数があります(例:112345673または119876543)。これはSQLで可能ですか、それともPHPで行う必要があります。次にそこに挿入しますか?

4

6 に答える 6

3

一度に1行ずつ挿入する場合...

--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

これにより、11桁の乱数が得られます。乱数が9桁より短い場合は、接頭辞としてゼロが付けられるため、全長は常に11になります。

select '11' + right('11000000000' + 
    cast(abs(convert(bigint,convert(varbinary(8),newid()))) as varchar(20)), 9)
于 2012-06-06T22:19:31.727 に答える
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 に答える
1

PHPを使用します。

$randnum = "11".rand(1000000, 9999999);

次に、それをクエリに挿入するだけで、出来上がりです。

于 2012-06-06T22:12:38.227 に答える
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

これに関する1つの問題は、11桁の長さを保証しないことです。数が少ないために10になることもあります。乱数ジェネレーターが小さい数を思いついたときに、余分な0を入力する方法を実際に調べていません。

于 2012-06-06T22:12:01.643 に答える
0

私は試してみます:

SELECT '11'+REPLACE(STR(RAND(),9,7),'0.','')

...またはこのわずかなバリエーション...

SELECT '11'+RIGHT(STR(RAND(),9,7),7)

...どちらか速い方。

于 2012-06-07T01:23:20.167 に答える