首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL视图语法,其中子句大于或等于去年4月的第一个星期一。

MySQL视图语法,其中子句大于或等于去年4月的第一个星期一。
EN

Stack Overflow用户
提问于 2014-02-13 17:26:46
回答 2查看 205关注 0票数 1

我正在为视图编写语法,以便在数据库中定位数据,其中时间戳col大于或等于去年4月的第一个星期一的日期。我不能使用静态日期,因为去年4月的第一个星期一与当前日期有关。

如有任何指示,将不胜感激。我花了相当长的时间试图弄清楚如何使用MySQL的datetime函数来完成这个任务,但到目前为止还没有任何运气!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-13 18:07:20

去年四月的当期日期:

代码语言:javascript
复制
SELECT DATE_ADD(CURDATE(), INTERVAL ((4-MONTH(CURDATE()))%24-12)%12 MONTH);

以去年四月为当前日期:

代码语言:javascript
复制
SELECT YEAR(DATE_ADD(CURDATE(), INTERVAL ((4-MONTH(CURDATE()))%24-12)%12 MONTH));

例如,2013年4月的第一个星期一:

代码语言:javascript
复制
SELECT DATE_SUB('2013-04-07',INTERVAL WEEKDAY('2013-04-07') DAY);

去年四月的第一个星期一:

代码语言:javascript
复制
SELECT DATE_SUB(CONCAT(YEAR(DATE_ADD(CURDATE(), INTERVAL ((4-MONTH(CURDATE()))%24-12)%12 MONTH)),"-04-07"),INTERVAL WEEKDAY(CONCAT(YEAR(DATE_ADD(CURDATE(), INTERVAL ((4-MONTH(CURDATE()))%24-12)%12 MONTH)),"-04-07")) DAY);
票数 1
EN

Stack Overflow用户

发布于 2014-02-13 17:46:18

您可以这样做的一种方法是使用以下SQL:

代码语言:javascript
复制
SELECT * FROM DATA WHERE year(adddate(created_at, interval 9 month)) >= year(curdate());

这只是在9个月前将一切转移到未来,因此,就where条款而言,2013年4月1日似乎是2014年1月1日。

你也可以在3个月前把所有的东西都调回原处,但是你也必须改变日期,以确保它在明年的1月1日到4月1日之间起作用。

sqlFiddle

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21761241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档