You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Databricks中Case语句执行报错求助:当前日期判断语法问题

Databricks Spark SQL日期对比Case语句修正方案

你遇到的问题是**date.now()是Python语法,无法在Spark SQL语句中直接使用**,Spark SQL有专属的日期函数,以下是几种可行的解决方法:

方法1:使用Spark SQL内置的current_date()函数

current_date()会返回当前系统日期(仅日期部分,格式为yyyy-MM-dd),适合和日期类型的StartDate字段对比:

salesforce_df = spark.sql("""
  SELECT 
    CASE WHEN StartDate = current_date() THEN True ELSE False END as conversion 
  FROM Tablename;
""")

方法2:处理带时间戳的StartDate字段

如果StartDate是包含时分秒的时间戳类型,需要先将其截断到日期维度再对比:

方式A:用date_trunc()截断到天

salesforce_df = spark.sql("""
  SELECT 
    CASE WHEN date_trunc('day', StartDate) = current_date() THEN True ELSE False END as conversion 
  FROM Tablename;
""")

方式B:将StartDate转换为日期类型

salesforce_df = spark.sql("""
  SELECT 
    CASE WHEN StartDate CAST(date) = current_date() THEN True ELSE False END as conversion 
  FROM Tablename;
""")

方法3:Python侧获取日期后传入SQL(更灵活)

先在Python中拿到当前日期,再通过字符串格式化或参数绑定传入SQL:

字符串格式化方式(注意SQL注入风险)

from datetime import date
current_date_str = date.today().strftime("%Y-%m-%d")
salesforce_df = spark.sql(f"""
  SELECT 
    CASE WHEN StartDate = '{current_date_str}' THEN True ELSE False END as conversion 
  FROM Tablename;
""")

参数绑定方式(更安全)

用Spark DataFrame API替代SQL,避免SQL注入问题:

from datetime import date
from pyspark.sql.functions import col, lit

current_date = date.today()
salesforce_df = spark.table("Tablename").withColumn(
    "conversion", 
    (col("StartDate") == lit(current_date)).cast("boolean")
)

内容的提问来源于stack exchange,提问作者Rohit Kulkarni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 11:52:42