返回输入日期的月份开始MySQL

问题描述:

假设我输入日期为“2017-01-31”或“2017-02-28”。我想要输入此日期并使SQL将其更改为“2017-01-01”或“2017-02-01”。返回输入日期的月份开始MySQL

有没有办法通过查询中的MySQL函数来做到这一点?

+0

你做SQL必须改变它?我假设数据库调用和用户之间有某种东西。 – SaggingRufus

有几种方法可以做到这一点。我的首选是使用DATE_FORMAT以常数01替换日期部分。

SELECT DATE_FORMAT('2017-01-31','%Y-%m-01') + INTERVAL 0 DAY AS dt 

有很多方法来皮肤那猫。

例如,我们可以减去的整数天数减1 ...

SELECT '2017-01-31' + INTERVAL 1-DAY('2017-01-31') DAY 

(与第二形式,日期值需要提供两次。随着第一,我们只需要。提供值一次,我认为第一种形式是更容易为将来的读者了解...相当清楚的是作者正打算)

+0

谢谢你,真是太棒了。 – Zeusftw

+0

@Zeusftw:如果你想在本月的最后一天,MySQL提供'LAST_DAY()'函数。不幸的是,没有FIRST_DAY()函数。在第一个查询中,'+ INTERVAL 0 DAY'不是绝对必要的。但它确实会导致从'DATE_FORMAT'返回的字符串被转换回'DATE',这是我们期望从一个函数中返回的函数,该函数让我们获得了该月的“第一天”。 – spencer7593

+0

@Zeusftw,如果您对Spencer7593的回答满意,请将其标记为已解决 – Mojtaba

使用您的日期,而不是我的例子:

SELECT CONCAT_WS('-',YEAR('2017-01-28'),MONTH('2017-01-28'),'01')