У меня нет доступа к Oracle, чтобы играть с опциями для вас.Но у меня есть один совет:
- Если этот код выполняется часто, будьте осторожны с использованием преобразования строк и сравнения строк, они обычно ужасно медленны по сравнению с числовой обработкой
- Но, если это только изредкаиспользовать, идти с тем, что проще всего, и винт производительности :)
Имея это в виду, я бы использовал EXTRACT ... (Обратите внимание, как я уже сказал, я не могу это проверить)
UPDATE indw.time
SET t.time_SEASON = CASE
WHEN EXTRACT(MONTH, time_DAY) < 3 THEN 'Winter'
WHEN EXTRACT(MONTH, time_DAY) = 3 THEN
CASE WHEN EXTRACT(DAY, time_DAY) <= 20 THEN 'Winter' ELSE 'Spring' END
WHEN EXTRACT(MONTH, time_DAY) < 6 THEN 'Spring'
WHEN EXTRACT(MONTH, time_DAY) = 6 THEN
CASE WHEN EXTRACT(DAY, time_DAY) <= 20 THEN 'Spring' ELSE 'Summer' END
WHEN EXTRACT(MONTH, time_DAY) < 9 THEN 'Summer'
WHEN EXTRACT(MONTH, time_DAY) = 9 THEN
CASE WHEN EXTRACT(DAY, time_DAY) <= 20 THEN 'Summer' ELSE 'Autumn' END
WHEN EXTRACT(MONTH, time_DAY) < 12 THEN 'Autumn'
WHEN EXTRACT(MONTH, time_DAY) = 12 THEN
CASE WHEN EXTRACT(DAY, time_DAY) <= 20 THEN 'Autumn' ELSE 'Winter' END
END