2011-01-05 23 views
2

我需要補位列只有0或1,我嘗試以下,只給了我1:如何只爲位列生成o或1?

convert(bit, 2*rand()) 

我怎樣才能使它發揮作用?

+0

表達'2 * RAND()'將產生0和2之間 – 2011-01-05 15:22:00

+2

隨機值你應該知道,蘭特()(沒有傳遞給它的種子值,或總傳遞相同的種子值)將爲整個查詢返回一個值 - 所以如果您生成多行,它們將獲得相同的值。 – 2011-01-05 15:26:19

回答

3

將大於0的任何值傳遞給此表達式將每次產生1。爲了做到你想要什麼,你需要自己圓結果:

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

這會給你一個隨機01bit值。

+1

'rand()'只對每個查詢進行一次評估,所以所有的列值都是相同的。 – 2011-01-05 15:23:42

1

如果你是SQL Server 2008上,您可以使用

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) 

這將每行一次評估