[SQL] SQL을 사용하여 고유 한 난수를 생성
SQLSQL을 사용하여 고유 한 난수를 생성
나는 다음과 같은 기술을 사용하여 임의의 숫자를 생성하는 일부 SQL 코드가 있습니다 :
DECLARE @Random1 INT, @Random2 INT, @Random3 INT, @Random4 INT, @Random5 INT, @Random6 INT, @Upper INT, @Lower INT
---- This will create a random number between 1 and 49
SET @Lower = 1 ---- The lowest random number
SET @Upper = 49; ---- The highest random number
with nums as (
select @lower as n
union all
select nums.n+1
from nums
where nums.n < @Upper
),
randnums as
(select nums.n, ROW_NUMBER() over (order by newid()) as seqnum
from nums
)
select @Random1 = MAX(case when rn.seqnum = 1 then rn.n end),
@Random2 = MAX(case when rn.seqnum = 2 then rn.n end),
@Random3 = MAX(case when rn.seqnum = 3 then rn.n end),
@Random4 = MAX(case when rn.seqnum = 4 then rn.n end),
@Random5 = MAX(case when rn.seqnum = 5 then rn.n end),
@Random6 = MAX(case when rn.seqnum = 6 then rn.n end)
from randnums rn;
select @Random1, @Random2, @Random3, @Random4, @Random5, @Random6
내 질문은 무작위이 번호 생성 방법입니까? 더 "무작위"입니다이 작업을 수행하는 또 다른 방법이있다.
내가 사용하고 있습니다 :
Microsoft SQL Server 2008 (SP3) - 10.0.5512.0 (X64) Aug 22 2012 19:25:47 Copyright (c) 1988-2008 Microsoft Corporation Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
내가 중복되는 번호를 가질 수 없습니다 14,29,8,14,27,27 : 대부분의 솔루션에 대한 문제는이 같은 값으로 끝날 것입니다!
해결법
-
==============================
1.난 당신이 훨씬 간단하고 훨씬 쉽게 이런 일을 할 수있는 것 같아요
난 당신이 훨씬 간단하고 훨씬 쉽게 이런 일을 할 수있는 것 같아요
DECLARE @Upper INT; DECLARE @Lower INT; SET @Lower = 1 -- The lowest random number SET @Upper = 49 -- The highest random number SELECT @Lower + CONVERT(INT, (@Upper-@Lower+1)*RAND())
반복 I없이 임의의 숫자를 얻으려면이 일을 할 것입니다 생각
;with CTE as ( SELECT randomNumber, COUNT(1) countOfRandomNumber FROM ( SELECT ABS(CAST(NEWID() AS binary(6)) %49) + 1 randomNumber FROM sysobjects) sample GROUP BY randomNumber ) SELECT TOP 5 randomNumber FROM CTE ORDER BY newid()
당신이 가장 높은 한계 번호 49를 대체 할 수있는 최고 한도를 설정합니다
-
==============================
2.Laravel 경우 :
Laravel 경우 :
public function generatUniqueId() { $rand = rand(10000, 99999); $itemId = $rand; while (true) { if (!BookItem::whereBookItemId($itemId)->exists()) { break; } $itemId = rand(10000, 99999); } return $itemId; }
-
==============================
3.당신은 랜드 () 함수를 사용할 수 있습니다.
당신은 랜드 () 함수를 사용할 수 있습니다.
select CEILING(RAND() *<max of random numbers))
from https://stackoverflow.com/questions/19875588/generate-unique-random-numbers-using-sql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 서버 JDBC와 "NoClassDefFoundError를 모두 javax / XML / 바인드 / DatatypeConverter" (0) | 2020.07.14 |
---|---|
[SQL] 열 값으로 행 값을 만들기 - SQL PIVOT (0) | 2020.07.14 |
[SQL] PHP도 INI 값을 설정 한 후, MSSQL BLOB 데이터 (4096b)를 절단한다. 나는 하나의 실종? (0) | 2020.07.14 |
[SQL] 예외 java.sql.SQLException의 (0, 1> 파라미터의 수)의 범위 중 정수 인덱스 [중복] (0) | 2020.07.14 |
[SQL] (+)는 오라클 SQL의 기능은 무엇입니까? (0) | 2020.07.14 |