MySQL - 函数中从'yyyy-mm-mm'到'yyyy-mm'的日期格式

时间:2014-11-26 01:08:17

标签: mysql date format

我创建了一个函数,该函数以与原始格式不同的格式返回日期。 基本上,我正在测试这个Select MonthSub('2014-04-10',2)#语句,它应该返回 2014-02代替2014-02-10

有人检查我的代码,看看我在做什么是错的吗? 如果我使用date_format(new_in_date, '%y-%m')执行任何格式化操作,则会返回此错误:

ERROR 1292 (22007): Incorrect date value: '2014-02' for column 'new_in_date' at row 1

我写的功能:

Create function MonthSub (in_date date, in_mn_adjust int)
    returns date
Begin
    declare new_in_date date default in_date;
    set new_in_date := date_sub(new_in_date, interval in_mn_adjust month);
    return new_in_date;
end;

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你希望你的功能是:

  1. 根据日期d和数字n,您希望将n个月减去d
  2. 然后您只想返回日期的年份和月份
  3. 因此,您可以执行以下操作:

    SQL Fiddle

    MySQL 5.5.32架构设置

    create function MonthSub(d date, n int) 
    returns varchar(50) -- You're not returning a date, but a string 
                        -- ('yyyy-mm' is not a date)
    begin
      declare t date;
      declare ans varchar(50);
      set t = date_add(d, interval -(day(d)-1) day); -- Substract the days 
                                                     -- to avoid problems with things 
                                                     -- like 'February 30th'
      set t = date_add(t, interval -n month); -- Substract the months
      set ans = date_format(t, '%Y-%m'); -- Format the date to 'yyyy-mm'
      return ans; -- Return the date
    end //
    

    查询1

    -- Test it!
    select MonthSub('2014-05-02', 2)
    

    <强> Results

    | MONTHSUB('2014-05-02', 2) |
    |---------------------------|
    |                   2014-03 |