【发布时间】: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
假设我的输入日期为“2017-01-31”或“2017-02-28”。我想获取这个输入日期并使 SQL 将其更改为“2017-01-01”或“2017-02-01”。
有没有办法通过查询中的 MySQL 函数来做到这一点?
【问题讨论】:
标签: mysql database function date
有几种方法可以做到这一点。我的偏好是使用 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
(对于第二种形式,需要提供两次日期值。第一种,我们只需要提供一次值。我认为第一种形式对于未来的读者来说更容易理解......很清楚作者的意图。)
【讨论】:
LAST_DAY() 函数。不幸的是,没有FIRST_DAY() 功能。在第一个查询中,+ INTERVAL 0 DAY 不是绝对必要的。但它确实会导致从DATE_FORMAT 返回的字符串被转换回DATE,这是我们期望从让我们获得当月“第一天”的函数返回的内容。
用你的日期代替我的例子:
SELECT CONCAT_WS('-',YEAR('2017-01-28'),MONTH('2017-01-28'),'01')
【讨论】: