如何在MySQL中指定相对日期?

时间:2010-09-29 05:32:20

标签: sql mysql

我已经知道如何在SQL中的查询中获取明天的日期;使用ADDDATE(CURDATE(),1)DATE_ADD(CURDATE(), INTERVAL 1 DAYS)(或类似的东西)。

但是我怎么会得到一个更古怪的日期,例如下个月的10号呢?

4 个答案:

答案 0 :(得分:2)

<强> UPD

STR_TO_DATE(CONCAT(YEAR(NOW()) + IF(MONTH(NOW()) = 12, 1, 0), '-', IF(MONTH(NOW()) = 12, 0, MONTH(NOW())) + 1, '-', 10), '%Y-%m-%d')
是的,它看起来很奇怪,但它解决了“现在是十二月”的问题; - )

答案 1 :(得分:0)

在MySQL中没有这样的东西,这必须在DB之前完成。至少在你想要通常“更古怪”的时候提出的灵活性。

在查询中拥有这种逻辑或许不是一个好主意?视你的个人情况而定。

答案 2 :(得分:0)

我将首先引用上面的评论,并说我完全赞同它:

你真的想找到下个月的10号吗?我的假设是你想要一些基本的自然语言处理,这在MySQL中几乎是不可行的。 - Alexander Sagen 6小时前

然而,如果你是绝对的,完全的,绝望的,那么你可以考虑编写自己的功能来做到这一点。你必须首先确定你将要发送什么类型的输入(即你真的要传递一个字符串值,如“下个月10日”),或者这可以表示为日,月,例如10,+ 1。如果是后者,它会让事情变得容易多了。否则,您正在考虑评估输入的文本并决定要做什么。基本上,大的IF报表。它是可行的 - 但它不是SQL的目的。

答案 3 :(得分:0)

对于复杂的日期逻辑,您可能需要考虑预先生成日期表并从中进行选择。拥有适当的列将使where子句的选择更容易。它是数据仓库常见且几乎需要的技术。也许是这样的事情:

http://www.ipcdesigns.com/dim_date/

然后你可以做(​​如果我理解他的架构正确):

SELECT full_date FROM date_table WHERE date_table.day_num_of_month = 10 AND date_table.month_num_overall = (SELECT month_num_overall+1 FROM date_table WHERE full_date = NOW())