Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Неожиданное поведение RAND() / 6 сообщений из 6, страница 1 из 1
27.11.2008, 13:06
    #35678902
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неожиданное поведение RAND()
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
update command options using c off
DB20000I  The UPDATE COMMAND OPTIONS command completed successfully.

create table x( rand_value int )
DB20000I  The SQL command completed successfully.

insert into x with tmp (id) as ( values  1  union all select id+ 1  from tmp where id< 1000000  ) select (rand()* 500000 ) from tmp
DB20000I  The SQL command completed successfully.

select count(distinct rand_value) from x

 1 
-----------
       32768 

   1  record(s) selected.


rollback
DB20000I  The SQL command completed successfully.
...
Рейтинг: 0 / 0
27.11.2008, 13:08
    #35678906
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неожиданное поведение RAND()
Выходит умножать на более чем 32768 бесполезно.
Выкрутился используя (rand()*32768+rand()*32768+rand()*32768 .... )
прикольно, правда?
...
Рейтинг: 0 / 0
27.11.2008, 13:21
    #35678967
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неожиданное поведение RAND()
А вообще можно проще - rand()*rand() :)
...
Рейтинг: 0 / 0
27.11.2008, 13:24
    #35678982
Неожиданное поведение RAND()
gardenmanВыходит умножать на более чем 32768 бесполезно.
Выкрутился используя (rand()*32768+rand()*32768+rand()*32768 .... )
прикольно, правда?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
Database server        = DB2/NT  9 . 1 . 4 

db2 "select rand()*50000 from sysibm.sysdummy1"

 1 
------------------------
  + 2 ,20862453077792E+ 004 

   1  record(s) selected.

db2 "select rand()*50000.0 from sysibm.sysdummy1"

 1 
------------------------
  + 2 ,60719626453444E+ 004 

   1  record(s) selected.


db2 "select integer(rand()*50000) from sysibm.sysdummy1"

 1 
-----------
       45113 

   1  record(s) selected.


db2 "select integer(rand()*50000) from sysibm.sysdummy1"

 1 
-----------
        5320 

   1  record(s) selected.


db2 "select integer(rand()*50000) from sysibm.sysdummy1"

 1 
-----------
       45132 

   1  record(s) selected.
...
Рейтинг: 0 / 0
27.11.2008, 13:47
    #35679101
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неожиданное поведение RAND()
gardenmanВыходит умножать на более чем 32768 бесполезно.
Выкрутился используя (rand()*32768+rand()*32768+rand()*32768 .... )
прикольно, правда?Ну, это факт известный - про rand.
Описан в поваренной книге.
Можно так:
Код: plaintext
1.
2.
with t(i) as (values  1  union all select i+ 1  from t where i< 500000 )
select count(distinct (current timestamp - current timezone - timestamp(generate_unique())))
from t
для генерации случайных чисел сделать...
...
Рейтинг: 0 / 0
27.11.2008, 16:06
    #35679758
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неожиданное поведение RAND()
2 Евгений Хабаров

Фишка в том, что RAND() может сгенерировать только 32768 уникальных начений.
Потом все пойдет по кругу.
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Неожиданное поведение RAND() / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]