如何在PostgreSQL中编写函数以根据传递给月份的月份名称获取月份的开始日期和结束日期

时间:2019-09-13 06:15:34

标签: postgresql

我有一种情况,我需要传递月份名称并获取该月的开始日期和结束日期。(例如->如果用户选择一月,则应返回01/01/2019和31/01/2019。

我可以获得当前月份的开始和结束日期。

本月的开始日期-

select date(date_trunc('month', current_date))

当月的结束日期-

select date(date_trunc('month', current_date) + interval '1 month - 1 day');

我想要Postgresql中的一个函数,该函数可以根据传递给它的月份的名称返回月份的开始日期和结束日期。

1 个答案:

答案 0 :(得分:1)

demo:db<>fiddle

CREATE OR REPLACE FUNCTION get_month_start_and_end(_month text) 
RETURNS TABLE (start_date date, end_date date) 
AS $$
BEGIN
    RETURN QUERY
    SELECT 
        _start_date,
        (_start_date + interval '1 month -1 day')::date
    FROM (
        SELECT 
            to_date(_month || date_part('year', CURRENT_DATE), 'MonthYYYY') AS _start_date
    ) s;
END;
$$ LANGUAGE plpgsql;
  1. 获取当前年份:date_part('year', CURRENT_DATE)
  2. 获取月份和年份的日期:to_date(<month text> || <year from 1.>, 'MonthYYYY')。这是月份的第一天,因为没有给出日期值
  3. 按照您已经描述的那样计算月份的结束日期
  4. 给出两列