2011-01-05 3 views
2

는 난 단지 0 또는 1 비트 열을 작성해야합니다, 나는 단지 나에게 일을 준, 다음 시도 :비트 열에 대해서만 o 또는 1을 생성하는 방법은 무엇입니까?

convert(bit, 2*rand()) 

어떻게 작동 할 수 있습니까?

+0

표현'2 * RAND()'당신은 알고 있어야 0과 2 –

+2

사이의 임의의 값을 생성하는 랜드() (항상 그것을 시드 값을 전달하거나하지 않고 동일한 시드 값을 전달)은 전체 쿼리에 대해 하나의 값을 반환합니다. 따라서 여러 행을 생성하는 경우 모두 동일한 값을 갖게됩니다. –

답변

3

이 표현식에 0보다 큰 값을 전달하면 매번 1이됩니다. 당신이 원하는 일을하기 위해, 당신은 결과를 자신을 반올림해야합니다

select convert(bit, round(1*rand(),0)) 

이 당신에게 임의의 0 또는 1bit 가치를 제공 할 것입니다. 당신은 SQL 서버 2008에있는 경우

+1

'rand()'는 쿼리 당 한 번만 평가되지만 모든 열 값은 동일합니다. –

1

당신은 당신이 사용할 수있는 이전 버전의

CAST(CAST(CRYPT_GEN_RANDOM(1) AS int)%2 AS BIT)

을 사용할 수 있습니다

여러 행을해야하고, 당신은 상관하지 않는 경우 CAST(CAST(CHECKSUM(NEWID()) AS int)%2 AS BIT)

0

특정 값의 분포에 대해 다음과 같은 것이 적절할 수 있습니다.

CONVERT(bit,SUBSTRING(CONVERT(binary(18),newid()),1,1)&1) 

이 행마다 한 번씩 평가됩니다

관련 문제