Страница 1 из 1

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

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

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

Спасибо

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

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

Добавлено: 08 июн 2008, 10:37
dimitr
в 2.1 есть встроенный RAND

Добавлено: 08 июн 2008, 14:37
Zaratustra
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 "......")
Как быть?

Добавлено: 08 июн 2008, 16:01
hvlad
Zaratustra писал(а):никак не догоню как TIMESTAMP к числу привести
Вычесть из него другой TIMESTAMP

Добавлено: 09 июн 2008, 11:41
armagedon2007

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

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