Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как получить рандомное значение из массива  [new]
?????
Guest
Доброго времени суток!

Как можно получить рандомное значение из массива varchar?
30 сен 09, 08:46    [7722926]     Ответить | Цитировать Сообщить модератору
 Re: Как получить рандомное значение из массива  [new]
--__Александр__--
Member

Откуда:
Сообщений: 2631
при помщи newid или rand.
30 сен 09, 09:04    [7722977]     Ответить | Цитировать Сообщить модератору
 Re: Как получить рандомное значение из массива  [new]
Ozzy-Osbourne
Member

Откуда: Balashikha
Сообщений: 139
?????
получить рандомное значение из массива varchar?
случайный символ, что ли ? через newid() или rand(), сами выбирайте:
declare @s varchar(100)
set @s='abcdefghijklmnopqrstuvwxyz0123456789 '
select 
 substring(@s, cast(ceiling(1.*abs(checksum(newid()))*datalength(@s)/power(2.,31)) as int), 1) c1
,substring(@s,cast(ceiling(rand()*datalength(@s))as int),1) c2
30 сен 09, 09:16    [7722999]     Ответить | Цитировать Сообщить модератору
 Re: Как получить рандомное значение из массива  [new]
?????
Guest
Разобрался, создал временную таблицу и из нее данные рандомом тяну.
30 сен 09, 09:16    [7723000]     Ответить | Цитировать Сообщить модератору
 Re: Как получить рандомное значение из массива  [new]
Ozzy-Osbourne
Member

Откуда: Balashikha
Сообщений: 139
PS. Пока набирал текст, вам уже ответили :-)
30 сен 09, 09:16    [7723003]     Ответить | Цитировать Сообщить модератору
 Re: Как получить рандомное значение из массива  [new]
vino
Member

Откуда:
Сообщений: 1191
Ozzy-Osbourne
?????
получить рандомное значение из массива varchar?
случайный символ, что ли ? через newid() или rand(), сами выбирайте:
declare @s varchar(100)
set @s='abcdefghijklmnopqrstuvwxyz0123456789 '
select 
 substring(@s, cast(ceiling(1.*abs(checksum(newid()))*datalength(@s)/power(2.,31)) as int), 1) c1
,substring(@s,cast(ceiling(rand()*datalength(@s))as int),1) c2

Нужно быть аккуратнее с datalength - при работе с юникодом, например, так
declare @s nvarchar(100)
set @s=' abcdefghijklmnopqrstuvwxyz0123456789'
select datalength(@s), len(@s)
диапазон индексов правильным будет только в случае len(@s),
а с datalength вероятность появления пустого символа будет больше 50%, что не способствует случайности.
30 сен 09, 10:41    [7723356]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить