Re[2]: Yaffil, баг(фича?) с DATEDIFF
Здравствуйте, 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?
Обнаружил, что при операциях с частями даты и частями времени используется разная логика. Для дат: 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
Здравствуйте, dennis. Нда, проблема, не подумал... Зато в процессе размышления над выражением, наткнулся на вопрос: а функции определения високосного года в fb не планируется быть? Ну так тут, после того как в FB21 функция MOD появилась, все намного проще :) -- С уважением, Пиминов Роман
Re[2]: WEEKDAY и WEEK
Здравствуйте, 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]: Похоже на пятничное чтение
Здравствуйте, Vlad. Вы писали 24 сентября 2007 г., 23:25:06: Мальчик уже не просто жжёт, у него минимум 40 по Цельсию (или по Менделееву, не знаю) Блин, в цитатник! :D -- Пиминов Роман
Re[2]: FB 2.0, FB 2.1, SUBSTRING, NULL
Здравствуйте Евгений. Вы писали 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
Тестируем собственно с Коваленко 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 (смотрел последний билд, там все равно пробелы возвращаются)? -- Пиминов Роман