Как перевернуть случайные биты в SQL - PullRequest
2 голосов
/ 15 июня 2011

В целях тестирования я хочу обновить таблицу, установив биты в столбцах в случайное значение.

update [Planned] 
set [IsPlannable] = 1 * rand(cast(cast(newid() as binary(8)) as int))
WHERE [ComputerID] > 100

Кажется, все работает как надо , но не так, как я хочу . Я думаю, проблема в том, что результат в большинстве случаев будет выше, чем 1.

Как я могу перевернуть случайные биты в случайные значения ?

Ответы [ 3 ]

6 голосов
/ 15 июня 2011

1 * по-прежнему дает дробное число, и, учитывая, что cast(0.1 as bit) даст 1, как и cast(0.9 as bit) все обновления установлены на 1.

Вы можете;

update Planned set IsPlannable = case when rand(cast(newid() as binary(8))) < 0.5 then 0 else 1 end
1 голос
/ 15 июня 2011

В зависимости от того, сколько битовых полей вы должны использовать, вы можете сгенерировать все возможные настройки, используя что-то вроде этого:

with test as (
    select 0 as myId, cast(0 as bit) col1, cast(0 as bit) col2, cast(0 as bit) col3
    union all
    select myId + 1, 
        case when myId & 1 = 1 then cast(1 as bit) else cast(0 as bit) end,
        case when myId & 2 = 2 then cast(1 as bit) else cast(0 as bit) end,
        case when myId & 4 = 4 then cast(1 as bit) else cast(0 as bit) end
        from test
        where myId<100
)
select distinct col1, col2, col3 from test
0 голосов
/ 15 июня 2011

Как насчет

cast(round(rand(), 0) as bit)
...