CASE

Access Violation, некорректное выполнение запросов или вызовов API, ошибки утилит командной строки, в общем все, что вам мешает работать

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

Ответить
CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

CASE

Сообщение CyberMax » 16 фев 2007, 03:15

FB 2.0. ХП:

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

SET TERM ^ ;

CREATE PROCEDURE GET_NAME_PERIOD (
    ID_PERIOD INTEGER)
RETURNS (
    RESULT VARCHAR(16))
AS
BEGIN
    SELECT
        CASE CAST(SUBSTRING(:ID_PERIOD FROM 5 FOR 6) AS INTEGER)
            WHEN 1 THEN 'Январь'
            WHEN 2 THEN 'Февраль'
            WHEN 3 THEN 'Март'
            WHEN 4 THEN 'Апрель'
            WHEN 5 THEN 'Май'
            WHEN 6 THEN 'Июнь'
            WHEN 7 THEN 'Июль'
            WHEN 8 THEN 'Август'
            WHEN 9 THEN 'Сентябрь'
            WHEN 10 THEN 'Октябрь'
            WHEN 11 THEN 'Ноябрь'
            WHEN 12 THEN 'Декабрь'
            ELSE 'Unknown'
            END
            || '_' || SUBSTRING(:ID_PERIOD FROM 1 FOR 4) || ' г.'
    FROM
        RDB$DATABASE
    INTO
        :RESULT;

    SUSPEND;
END^

SET TERM ; ^
Задаем период, например, 200705. На выходе: "Май{5 пробелов}_2007 г.". Как показала проверка, имя месяца дополняется таким количеством пробелов, чтобы оно равнялась самой длинной строке в выборке. Это так и задумывалось?

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 16 фев 2007, 08:04

Угу. Строковые константы имеют тип CHAR. Давно. Еще с Джима, наверное. Была какая-то дискуссия по этому поводу, но результата я что-то не припомню...

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

Сообщение dimitr » 17 фев 2007, 07:56

это по стандарту так

Ответить