Мне нравится писать мой sql, как показано ниже.
Преимущество заключается в том, что я могу повторно использовать блоки кода, которые я использую несколько раз, и когда я что-то исправляю, мне всегда нужно только исправить это в одном месте.
например. Я пишу 2 раза current_year вместо extract (год от sys_date) .
Другой пример, я пишу 2 раза first_of_april_this_year вместо to_date ('01 .APR. '|| current_year ||' 00:00:00 ',' DD.MON.YYYY HH24 : MI: SS ')
.
Это работает, но, как вы можете видеть ниже, это не очень красиво / легко читается. Есть ли у вас лучшие предложения, когда я не теряю преимущества того, что мне никогда не придется что-то исправлять в нескольких местах, но делаю это более читабельным? Я также использовал with-предложения, но IMHO, это еще менее читабельно. Большое спасибо! <3 </p>
PS: Давайте, пожалуйста, остановимся на теме повторного использования блоков кода здесь, а не углубляться в то, как эта конкретная задача по поиску предыдущего 1-го апреля тестируемым способом могла бы быть выполнена лучше. TY!
-- gives the latest 1st of April based on sysdate, whereas for testing sysdate can freely be set
select
case when sys_date <= first_of_april_this_year then first_of_april_last_year else first_of_april_this_year end previous_first_of_april
-- ,params3.*
from (
select
to_date ('01.APR.'|| current_year ||' 00:00:00', 'DD.MON.YYYY HH24:MI:SS') first_of_april_this_year,
to_date ('01.APR.'||(current_year-1) ||' 00:00:00', 'DD.MON.YYYY HH24:MI:SS') first_of_april_last_year,
params2.*
from (
select
extract (year from sys_date) current_year,
params1.*
from
(select
to_date ('02.AUG.2018 00:00:01', 'DD.MON.YYYY HH24:MI:SS') sys_date -- for testing, sysdate can be overwritten
--sysdate sys_date
from dual) params1
) params2
) params3;