如何在Databricks SparkSQL中转换T-SQL的datefromparts函数(无需创建函数)
解决方案:T-SQL
datefromparts 转 SparkSQL 原T-SQL代码的逻辑是获取当前年份减1的12月31日,并以dd/MM/yyyy格式输出。SparkSQL没有直接对应的datefromparts函数,但可以通过以下两种方式实现:
方法1:日期截断+偏移(推荐)
利用date_trunc获取当年年初,再减1天得到去年年末,最后格式化输出:
SELECT date_format(date_add(date_trunc('year', current_date()), -1), 'dd/MM/yyyy') AS last_year_end;
date_trunc('year', current_date()):得到当前年份的1月1日(如2023-01-01)date_add(..., -1):减去1天,得到去年12月31日(如2022-12-31)date_format(..., 'dd/MM/yyyy'):转换为你需要的日/月/年格式
方法2:字符串拼接模拟datefromparts
直接拼接年份、月份、日期字符串,转成日期后格式化:
SELECT date_format(to_date(concat(year(current_date()) - 1, '-12-31')), 'dd/MM/yyyy') AS last_year_end;
concat(year(current_date()) -1, '-12-31'):拼接出去年12月31日的字符串(如2022-12-31)to_date(...):将字符串转为日期类型date_format(...):转换为目标格式
补充说明
原T-SQL中的sysdatetime()是带时间戳的函数,SparkSQL中对应的是current_timestamp(),但如果只需要日期部分,用current_date()更高效(无需处理时间部分)。
内容的提问来源于stack exchange,提问作者Patterson
相关产品推荐
相关产品推荐

