Если показанный запрос является вашим фактическим запросом, вы получите сообщение об ошибке «Token unknown», так как DATE
является зарезервированным словом и не может использоваться в качестве идентификатора без явных кавычек.Либо переименуйте столбец (настоятельно рекомендуется), либо используйте "DATE"
вместо DATE
в запросе.
Возвращаемое значение EXTRACT(MONTH FROM somedate)
является целым числом, а не CHAR(3)
, поэтому приведение(EXTRACT (MONTH FROM DATE))= CAST(1 AS CHAR(3))
вызовет дополнительные издержки, так как Firebird потребуется преобразовать результат EXTRACT
из целого числа в строку, чтобы оценить условие.Вместо этого вы должны использовать EXTRACT(MONTH FROM "DATE") = 1
.
Ваш код можно упростить, используя искомый регистр , поскольку это позволяет избежать повторного извлечения:
CASE EXTRACT (MONTH FROM "DATE")
WHEN 1 THEN 'JAN'
WHEN 2 THEN 'FEV'
WHEN 3 THEN 'MAR'
-- ... etc
END
Символьные литералы уже CHAR
(CHAR(3)
в данном случае), поэтому приведение не требуется.Но если вам действительно нужно использовать приведение, то я предлагаю поместить приведение вокруг всего CASE ... END
, а не вокруг отдельных значений в предложениях THEN
.
Если вы хотите еще больше сузить это, вы можететакже используйте функцию DECODE
:
DECODE(EXTRACT (MONTH FROM "DATE"), 1, 'JAN', 2, 'FEV', 3, 'MAR' /* ... etc */)