SQL函数将日期四舍五入到最近的月份

Posted

技术标签:

【中文标题】SQL函数将日期四舍五入到最近的月份【英文标题】:SQL function to round a date to nearest month 【发布时间】:2020-08-03 13:20:43 【问题描述】:

我正在尝试使用 SQL 将日期四舍五入到最近的月份

select date_format(date_field, %Y-%m) as date_rounded

并得到错误:

'无效操作:函数 date_format(date, "unknown") 没有 存在; [SQL 状态=42883,数据库错误代码=500310]'

这个函数只存在于某些版本的 SQL 中还是我使用不正确?

【问题讨论】:

您使用的是哪个数据库? SQL 函数取决于数据库和数据库版本,而不是“SQL 版本”。 date_format() 适用于 mysql 或 Oracle,您使用的是其中任何一个吗? 我不确定 - 它是通过 SQL Workbench 如果是 SQL Workbench 而不是 MySQL Workbench,那么您需要验证您使用的实际数据库,以确定您可以使用哪些功能。 那可能是什么/我怎样才能知道?会不会只是 SQL? 【参考方案1】:

此功能将有助于对日期进行四舍五入。

SELECT CASE 
         WHEN date_format(date_field, '%d') < '16' THEN
           date_format(date_field, '%Y-%m-01')
         ELSE
           date_format( DATE_ADD(date_field, INTERVAL 1 MONTH) , '%Y-%m-01')
         END as 'date_rounded'
  FROM my_table;

如果日期小于16,则到当月1日,否则,日期将四舍五入到下个月1日

【讨论】:

【参考方案2】:

您可以使用日期函数:

to_char(
  add_months(
    date_field, 
    case 
      when datediff(day, date_field, last_day(date_field)) < date_part(d, date_field) then 1 
      else 0 
    end
   ), 
  'YYYY-MM'
)

【讨论】:

这部分可行,但我希望四舍五入到本月最近的“开始” - 例如6 月 30 日应该是 7 月,6 月 2 日应该是 6 月 行得通,谢谢,但是没有更简单的方法吗?

以上是关于SQL函数将日期四舍五入到最近的月份的主要内容,如果未能解决你的问题,请参考以下文章

在 AWS 红移中将日期时间列四舍五入到最近的小时

MySQL中日期之间的月份差异

Oracle函数汇总

如何计算特定日期的剩余月份? [复制]

oracle:数值型函数,日期函数,转换函数,组函数,分组,排序,两表查询连接

将Rails DateTime四舍五入到最近的15分钟间隔