Как получить начало месяца и квартала в Oracle?

Мы уже рассматривали как получить начало месяца и квартала в t-SQL. Сейчас покажу как это сделать в Oracle.
В Oracle сделать это намного проще c помощью встроенной функции trunc:

select  trunc(sysdate, 'MM') as monthStart
        , trunc(sysdate, 'Q') as quarterStart
from    dual

Функция в Oracle для начала месяца может выглядеть так:

create or replace function monthStart(inputDate in date)
  return date
as 
begin
  return trunc(inputDate, 'MM');
end;

Применение функции:
select monthStart(sysdate) as ms from dual

Функция для начала квартала:

create or replace function quarterStart(inputDate in date)
  return date
as 
begin
  return trunc(inputDate, 'Q');
end;

Применение функции:
select quarterStart(sysdate) as ms from dual

С помощью функции trunc можно не только получать начало периода, но и отсекать дробную часть числа.