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

CASE

Добавлено: 16 фев 2007, 03:15
CyberMax
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 г.". Как показала проверка, имя месяца дополняется таким количеством пробелов, чтобы оно равнялась самой длинной строке в выборке. Это так и задумывалось?

Добавлено: 16 фев 2007, 08:04
Dimitry Sibiryakov
Угу. Строковые константы имеют тип CHAR. Давно. Еще с Джима, наверное. Была какая-то дискуссия по этому поводу, но результата я что-то не припомню...

Добавлено: 17 фев 2007, 07:56
dimitr
это по стандарту так