Re[2]: Yaffil, баг(фича?) с DATEDIFF

2007-10-24 Пенетрантность Пиминов Роман

Здравствуйте, Oleg.

 У него еще к тому же неправильно MINUTE и HOUR вычисляются.

 Пример покажи.

DATEDIFF(HOUR, CAST('02.05.1998 00:02:03' AS TIMESTAMP),
   CAST('01.05.1998 01:02:03' AS TIMESTAMP))

Получаем 142.

DATEDIFF(MINUTE, CAST('01:02:03' AS TIME),
 CAST('01:59:03' AS TIME))

Получаем 7101.

DATEDIFF(SECOND, CAST('01:01:03' AS TIME),
 CAST('01:01:04' AS TIME))

Получаем 429495.

-- 
Пиминов Роман



Нелогичное поведение функции DATEDIFF?

2007-10-01 Пенетрантность Пиминов Роман

Обнаружил, что при операциях с частями даты и частями времени используется 
разная логика.

Для дат:
DATEDIFF(MONTH, CAST('30.01.2007' AS DATE), CAST('31.01.2007' AS
DATE)) вернет 0, а
DATEDIFF(MONTH, CAST('31.01.2007' AS DATE), CAST('01.02.2007' AS
DATE)) вернет 1. То есть получается сдвиг значения происходит при
смене месяца.

Для времени:
DATEDIFF(HOUR, CAST('01:59:59' AS TIME), CAST('02:59:58' AS
TIME)) вернет 0, а
DATEDIFF(HOUR, CAST('01:59:59' AS TIME), CAST('02:59:59' AS
TIME)) вернет 1. Получается, что считается количество целых часов.

Почему так сделано, кто знает?



Re[2]: WEEKDAY и WEEK

2007-09-27 Пенетрантность Пиминов Роман

Здравствуйте, dennis.

 Нда, проблема, не подумал... Зато в процессе размышления над выражением, 
 наткнулся на вопрос: а функции определения високосного года в fb не 
 планируется быть?  


Ну так тут, после того как в FB21 функция MOD появилась, все намного проще :)

-- 
С уважением,
 Пиминов Роман



Re[2]: WEEKDAY и WEEK

2007-09-26 Пенетрантность Пиминов Роман

Здравствуйте, Alex.

 Правнуки опубликуют результаты? ;о)

А что, прикольненько так получается...


EXECUTE BLOCK

RETURNS(BEGIN_DATE DATE,
YEAR_DAY SMALLINT,
WEEK_DAY SMALLINT,
FN_WEEK SMALLINT,
CURRENT_WEEK SMALLINT)
AS
  DECLARE VARIABLE END_DATE DATE;
BEGIN
  BEGIN_DATE   = '01.01.1001';
  END_DATE = '31.12.2999';
  CURRENT_WEEK = 1;

  WHILE (BEGIN_DATE = END_DATE) DO
  BEGIN
YEAR_DAY = EXTRACT(YEARDAY FROM BEGIN_DATE);
WEEK_DAY = EXTRACT(WEEKDAY FROM BEGIN_DATE);

FN_WEEK = (YEAR_DAY - WEEK_DAY + 6) / 7 + 1;

IF (YEAR_DAY = 0) THEN
  CURRENT_WEEK = 1;
ELSE
  IF (WEEK_DAY = 0) THEN
CURRENT_WEEK = CURRENT_WEEK + 1;

IF (CURRENT_WEEK  FN_WEEK) THEN
  SUSPEND;

BEGIN_DATE = BEGIN_DATE + 1;
 END
END


ЗЫ: Это не правнук :D

-- 
С уважением,
 Пиминов Роман



Re[2]: Похоже на пятничное чтение

2007-09-25 Пенетрантность Пиминов Роман

Здравствуйте, Vlad.

Вы писали 24 сентября 2007 г., 23:25:06:

 Мальчик уже не просто жжёт, у него минимум
 40 по Цельсию (или по Менделееву, не знаю)

Блин, в цитатник! :D

-- 
Пиминов Роман



Re[2]: FB 2.0, FB 2.1, SUBSTRING, NULL

2007-09-25 Пенетрантность Пиминов Роман

Здравствуйте Евгений.

Вы писали 22 сентября 2007 г., 1:22:59:

 На 2.0.3 RC1 запрос
 SELECT coalesce(SUBSTRING('Привет' FROM 1 FOR NULL),777) FROM RDB$DATABASE;
 у меня возвращает 777.


Да, действительно, на двойке возвращает 777. Пробовал исходный запрос в разных 
программах и компонентах, везде возвращает пробелы, кроме Firebird Net Provider 
и IBExpert. Правда остальные программы под FB не заточены. Весьма странно, у 
нас в IBProvider работа с сервером в тестируемой сборке с 2.0 и 2.1 не 
различается, а получаемые значения разные. Будем разбираться :)

-- 
С уважением,
 Пиминов Роман



FB 2.0, FB 2.1, SUBSTRING, NULL

2007-09-20 Пенетрантность Пиминов Роман

Тестируем собственно с Коваленко IBProvider, некоторые извращения с функцией 
SUBSTRING:

SELECT SUBSTRING('Привет' FROM 1 FOR NULL) FROM RDB$DATABASE

Смотрим в FB 2.0, возвращает строчку из шести пробелов (наверное так быть не 
должно?).
Смотрим в FB 2.1, возвращает null (наверное так и должно быть?).

IB Expert кстати и там и там показывает null (как они это делают?). Тут уж 
закрались подозрения в собственной адекватности, но в IBConsole вышло то же, 
что и у нас.

Собственно вопрос: как должно быть? Если так, как в FB 2.1, то будет ли это 
пофиксено в 2.0.3 (смотрел последний билд, там все равно пробелы возвращаются)?

--
Пиминов Роман