Приветствую Вас с своем скромном блоге.
Сегодня мне хотелось бы продолжить ряд статей (который дополняется медленно, но верно :) ) посвященных генерации случайных последовательностей в pgScript. Далее пойдет речь о последовательностях типа Data, Time и Timestamp.
Итак, начнем... Синтаксис определения генераторов всех выше указанных типов идентичен:
DATE(min, max, [sequence], [seed])
TIME(min, max, [sequence], [seed])
DATETIME(min, max, [sequence], [seed])
где,
min - Минимальная граница диапазона генерации значений;
max - Максимальная граница диапазона генерации значений;
[sequence] - необязательный параметр, устанавливает способ генерации. Различает только нулевое и ненулевое значение.
[seed] - необязательный параметр, указывает функции номер значения в последовательности которое должна вернуть функция. Это целесообразно использовать в случаях когда необходимо генерировать одинаковое значение при нескольких обращениях к одному генератору, иначе (по умолчанию) при каждом обращении будет генерироваться произвольное значение.
Простой пример использования (без необязательных параметров):
declare @Rec1;
declare @Rec2;
declare @Rec3;
begin
set @Rec1 = DATE('2012-01-01', '2012-01-30');
print @Rec1;
set @Rec2 = TIME ('09:00:00','13:00:00');
print @Rec2;
set @Rec3 = DATETIME ('2012-01-01 00:00:00', '2012-06-15 00:00:00');
print @Rec3;
end
Результат:
[PGSCRIPT ] 2012-01-19
[PGSCRIPT ] 11:24:29
[PGSCRIPT ] 2012-04-09 22:15:32
При повторном выполнении скрипта возвращаемые генератором значения изменятся, это означает, что при каждом обращении генератор возвращает новое значение отличное от предыдущего.
Пример использования с необязательным параметром [sequence]:
[sequence] = 0:
declare @Rec1;
declare @Rec2;
begin
set @Rec1 = DATE('2012-01-01', '2012-01-30',0);
print @Rec1;
set @Rec2 = DATE('2012-01-01', '2012-01-30',0);
print @Rec2;
end
Результат:
[PGSCRIPT ] 2012-01-25
[PGSCRIPT ] 2012-01-25
Здесь мы используем два генератора с абсолютно идентичными параметрами. При всех единовременных обращениях к этим генераторам их значения будут совпадать.
Далее рассмотрим пример с параметром [sequence] = 1 у второго генератора:
declare @Rec1;
declare @Rec2;
begin
set @Rec1 = DATE('2012-01-01', '2012-01-30',0);
print @Rec1;
set @Rec2 = DATE('2012-01-01', '2012-01-30',1);
print @Rec2;
end
Результат:
[PGSCRIPT ] 2012-01-18
[PGSCRIPT ] 2012-01-20
Измененное значение параметра [sequence] инициирует другой алгоритм генерации значений. При использовании этих двух генераторов совпадение выходных значений возможно, но это будет просто случайное совпадение, вероятность которого напрямую зависит от величины диапазона генерируемых значений.
Пример с использованием параметра [seed]:
declare @Rec1;
declare @Rec2;
declare @Rec3;
declare @Rec4;
begin
set @Rec1 = DATE('2012-01-01', '2012-01-30',0,1);
print @Rec1;
set @Rec2 = DATE('2012-01-01', '2012-01-30',0,1);
print @Rec2;
set @Rec3 = DATE('2012-01-01', '2012-01-30',0,2);
print @Rec3;
set @Rec4 = DATE('2012-01-01', '2012-01-30',0,2);
print @Rec4;
end
Результат:
[PGSCRIPT ] 2012-01-12
[PGSCRIPT ] 2012-01-12
[PGSCRIPT ] 2012-01-24
[PGSCRIPT ] 2012-01-24
Разница между @Rec1-@Rec2 и @Rec3-@Rec4 только в последнем параметре ([seed]).
Значения приведенные в результате остаются неизменными при повторном выполнении скрипта. Это означает что каждый генератор будет всегда возвращать одно и тоже значение, номер которого указан в параметре [seed].
Комментариев нет:
Отправить комментарий