Генератор случайных чисел и текущая дата (Firebird)

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Zaratustra
Сообщения: 2
Зарегистрирован: 07 июн 2008, 20:43

Генератор случайных чисел и текущая дата (Firebird)

Сообщение Zaratustra » 07 июн 2008, 20:47

Господа, помогите новичку.
Такой вопрос: как можно сварганить генератор случайных чисел и/или узнать текущую дату и время НЕ используя UDF?

Возможно ли это и где можно почитать про внутренние ф-ции Firebird (не UDF, если есть такие конечно)?

Спасибо

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 07 июн 2008, 21:16

сварганить генератор случайных чисел и/или узнать текущую дату и время НЕ используя UDF?
случайные без использования udf - нет. если только RAND не встроили и не исправили. а текущие дату-время - CURRENT_.

p.s. проще спросить, чем читать?

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 08 июн 2008, 10:37

в 2.1 есть встроенный RAND

Zaratustra
Сообщения: 2
Зарегистрирован: 07 июн 2008, 20:43

Сообщение Zaratustra » 08 июн 2008, 14:37

2.1 это конечно хорошо, но хотелось бы чуток расширить поддержку.
Раз есть время и дата то его можно сделать, вот только никак не догоню как TIMESTAMP к числу привести (второй день только пока в FB).
Делаю так:

Код: Выделить всё

SET TERM ^;
RECREATE PROCEDURE TEST_PROCEDURE
RETURNS (
	MAGIC_NUM DOUBLE PRECISION,
	DATAS VARCHAR(50)
)
AS
DECLARE VARIABLE NOW_DATE TIMESTAMP;
DECLARE VARIABLE BUF DOUBLE PRECISION = 0.00;
BEGIN
	SELECT CURRENT_TIMESTAMP FROM RDB$DATABASE INTO :NOW_DATE;
	MAGIC_NUM=CAST(NOW_DATE AS DOUBLE PRECISION);
	DATAS='reserved';
	SUSPEND;
END^
COMMIT^
SET TERM ;^
Получаю ошибку.... (conversion error from string "......")
Как быть?

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 08 июн 2008, 16:01

Zaratustra писал(а):никак не догоню как TIMESTAMP к числу привести
Вычесть из него другой TIMESTAMP

armagedon2007
Сообщения: 44
Зарегистрирован: 14 мар 2008, 21:01

Сообщение armagedon2007 » 09 июн 2008, 11:41

Код: Выделить всё

...
RETURNS(D DOUBLE PRECISION)
AS
DECLARE VARIABLE DD TIMESTAMP;
BEGIN
  DD = '01.01.0001';
  D = CURRENT_TIMESTAMP - :DD;
  SUSPEND;
END;

Ответить