我创建了一个函数,该函数以与原始格式不同的格式返回日期。
基本上,我正在测试这个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;
答案 0 :(得分:0)
如果我理解正确,你希望你的功能是:
d
和数字n
,您希望将n
个月减去d
因此,您可以执行以下操作:
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 |