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函数将日期四舍五入到最近的月份的主要内容,如果未能解决你的问题,请参考以下文章