【问题标题】:SQL function to round a date to nearest monthSQL函数将日期四舍五入到最近的月份
【发布时间】: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?

标签: sql amazon-redshift


【解决方案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 月
    • 行得通,谢谢,但是没有更简单的方法吗?
    猜你喜欢
    • 2015-02-04
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    相关资源
    最近更新 更多