如何将T-SQL的CASE WHEN语句转换为Databricks SparkSQL
正确转换T-SQL CASE WHEN到SparkSQL的写法
你的代码主要存在几个语法问题,修正后即可正常运行:
错误点分析
- 字符串引号不匹配:在Python中嵌套SQL语句时,外层双引号和内层单引号冲突,导致SQL字符串提前结束,触发解析错误。
- 别名格式错误:SparkSQL中带空格的列别名需要用**反引号(`)**包裹,而非单引号。
- 表名错误:原T-SQL的表是
dbo.DatesTestv3,你写成了table,需替换为实际表名。 - 函数对应偏差:T-SQL的
SYSDATETIME()返回带时分秒的时间戳,Spark中对应的是current_timestamp();如果你的as_of_date是纯日期类型,用current_date()也可,last_day函数对两种类型都兼容。
修正后的代码
纯SparkSQL语句
SELECT *, CASE WHEN as_of_date = last_day(add_months(current_timestamp(), -1)) THEN 'LM' END AS `Last Month End` FROM DatesTestv3
Python中调用SparkSQL的写法(用三重引号避免转义问题)
spark.sql(""" SELECT *, CASE WHEN as_of_date = last_day(add_months(current_timestamp(), -1)) THEN 'LM' END AS `Last Month End` FROM DatesTestv3 """)
如果你的表属于特定数据库(对应T-SQL的dbo),需加上数据库名:
SELECT *, CASE WHEN as_of_date = last_day(add_months(current_timestamp(), -1)) THEN 'LM' END AS `Last Month End` FROM dbo.DatesTestv3
内容的提问来源于stack exchange,提问作者Patterson
相关产品推荐
相关产品推荐

