Databricks 9.1执行SQL报datetime不支持错误,SQL Server可正常运行
问题解决:Databricks 9.1 SQL中DataType datetime不支持的错误
问题原因
Databricks Spark SQL(9.1版本)不支持SQL Server的datetime数据类型,需替换为Spark兼容的timestamp或date类型;同时部分SQL Server函数在Spark SQL中有不同实现,比如DATEADD(Spark中用ADD_MONTHS处理月份增减)、GETDATE(对应CURRENT_TIMESTAMP)、EOMONTH(对应LAST_DAY),且无需通过FORMAT转字符串再转换日期,直接用日期函数操作更高效可靠。
修正后的SQL语句
SELECT LAST_DAY(ADD_MONTHS(TRUNC(CURRENT_TIMESTAMP(), 'MM'), -14)) AS eom, ADD_MONTHS(TRUNC(CURRENT_TIMESTAMP(), 'MM'), -14) AS start_tm2
关键替换说明
CURRENT_TIMESTAMP():替换SQL Server的GETDATE(),获取当前时间戳ADD_MONTHS(date, num_months):替换DATEADD(month, ...),专门用于月份增减(你提到的date_add是Spark中处理天数增减的函数,不适合月份操作,这也是它无法正常工作的原因)TRUNC(date, 'MM'):将日期截断到当月第一天,替代原SQL中FORMAT(..., 'yyyy-MM-01 00:00:00.000')的逻辑,无需字符串转换LAST_DAY(date):替换EOMONTH(),获取指定日期所在月份的最后一天- 结果自动匹配
timestamp类型,符合你期望的输出格式
验证输出
执行后将得到如下结果:
| eom | start_tm2 |
|---|---|
| 2021-11-30 | 2021-11-01 00:00:00.000 |
内容的提问来源于stack exchange,提问作者tomatosauce
相关产品推荐
相关产品推荐

