我是一个使用mysql的菜鸟,在这里和谷歌搜索对我没什么帮助。
我需要获取同一工作日某个日期的前一个月的第一天
示例:鉴于此日期:2015年5月29日(星期五),我需要4月的第一个星期五(2015年4月3日)。
(请记住,我需要更新内的值(特别是在里面))
感谢您的帮助!祝你有愉快的一天。
答案 0 :(得分:0)
这显示了实现目标的一种方法。如果您不能使用或不想要中间变量,只需将它们替换为重复的SQL即可。
SET @startdate= '2015-04-06';
SET @firstdayofprevmon =
CONCAT(YEAR(DATE_ADD(@startdate, INTERVAL -1 MONTH)),'-',LPAD(MONTH(DATE_ADD(@startdate, INTERVAL -1 MONTH)),2,'0'),'-01' ) ;
SELECT
CASE
WHEN DAYOFWEEK(@firstdayofprevmon) < DAYOFWEEK(@startdate) THEN
/* If the day of week for first day of previous month is less than target day of week,simply increment the difference */
DATE_ADD(@firstdayofprevmon, INTERVAL (DAYOFWEEK(@startdate)-DAYOFWEEK(@firstdayofprevmon)) DAY)
WHEN DAYOFWEEK(@firstdayofprevmon) > DAYOFWEEK(@startdate) THEN
/* If greater, add a week to the difference */
DATE_ADD(@firstdayofprevmon, INTERVAL (DAYOFWEEK(@startdate)-DAYOFWEEK(@firstdayofprevmon) +7) DAY)
ELSE
/* Otherwise, the first day of the month is the answer */
@firstdayofprevmon
END AS TargetDate