2026-10-21 15:34:30
在SQL Server和HiveSQL中获取当月第一天和最后一天日期的函数用法如下:
SQL Server中的实现方法在SQL Server中,获取当月第一天需结合DATEADD和DATEDIFF函数。核心逻辑是通过计算当前日期与基准日期(如1900-01-01)之间的月份差,再基于该差值调整日期。具体公式为:SELECT DATEADD(mm, DATEDIFF(mm,0,GETDATE()), 0)其中,DATEDIFF(mm,0,GETDATE())计算从基准日期到当前日期的月份数,DATEADD(mm, ..., 0)将基准日期加上该月份数,最终得到当月第一天。例如,若当前日期为2023-10-15,则返回2023-10-01。
获取当月最后一天需进一步调整。公式为:SELECT DATEADD(ms,-3,DATEADD(mm, DATEDIFF(mm,0,GETDATE())+1,0))此处先通过DATEDIFF计算当前月份数并加1,得到下月第一天的基准日期,再通过DATEADD(ms,-3,...)将时间回退3毫秒(SQL Server中日期精度限制),从而精确到当月最后一天的23:59:59.997。例如,2023-10-31 23:59:59.997会被视为当月最后时刻。
HiveSQL中的实现方法HiveSQL提供了更简洁的last_day函数,可直接获取指定日期所在月份的最后一天。语法为:SELECT LAST_DAY('2022-09-13');该函数会解析输入日期的月份,并返回该月最后一天的日期(如2022-09-30)。若需获取当月第一天,可结合TRUNC函数(如存在)或通过字符串操作截取年份和月份后拼接"01"。例如:SELECT CONCAT(YEAR('2022-09-13'), '-', MONTH('2022-09-13'), '-01');但更推荐使用DATE_FORMAT和DATE_ADD组合实现:SELECT DATE_FORMAT(DATE_ADD(TRUNC('2022-09-13', 'MONTH'), 0), 'yyyy-MM-dd');(注:Hive版本差异可能导致函数名不同,需根据实际环境调整。)
关键区别与注意事项实际应用时,应根据数据库类型选择对应方法,并验证边界情况(如1月1日或12月31日)的准确性。