【问题标题】:Go Back To Beginning Of Month On Input Date MySQL [duplicate]返回到输入日期MySQL的月初[重复]
【发布时间】:2017-02-10 20:03:10
【问题描述】:

假设我的输入日期为“2017-01-31”或“2017-02-28”。我想获取这个输入日期并使 SQL 将其更改为“2017-01-01”或“2017-02-01”。

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

【问题讨论】:

  • SQL 必须改吗?我假设数据库调用和用户之间存在一些问题。

标签: mysql database function date


【解决方案1】:

有几种方法可以做到这一点。我的偏好是使用 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 

(对于第二种形式,需要提供两次日期值。第一种,我们只需要提供一次值。我认为第一种形式对于未来的读者来说更容易理解......很清楚作者的意图。)

【讨论】:

  • 谢谢你,太棒了。
  • @Zeusftw:如果你想要一个月的最后一天,MySQL 提供了一个LAST_DAY() 函数。不幸的是,没有FIRST_DAY() 功能。在第一个查询中,+ INTERVAL 0 DAY 不是绝对必要的。但它确实会导致从DATE_FORMAT 返回的字符串被转换回DATE,这是我们期望从让我们获得当月“第一天”的函数返回的内容。
  • @Zeusftw ,如果您对 Spencer7593 的回答感到满意,请将其标记为已解决
【解决方案2】:

用你的日期代替我的例子:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    • 2021-07-02
    • 2010-12-17
    • 1970-01-01
    相关资源
    最近更新 更多