怀陶 2024-03-20 14:19 采纳率: 100%
浏览 247
已结题

Doris删除本月数据

在Doris中用SQL删除本月数据时报错
errCode = 2, detailMessage = errCode = 2, detailMessage = Left expr of binary predicate should be column name, predicate: dw_cdate >= concat(substr('2024-03-20', 1, 7), '-01'), left expr type:DATETIME
要替换为怎样的SQL才能达到效果?

  • 写回答

4条回答 默认 最新

  • 鑫宝Code 优质创作者: 编程框架技术领域 2024-05-25 08:01
    关注
    此回答引用GPT4,由博主鑫宝Code参考后得出

    在Doris中,如果您遇到错误 Left expr of binary predicate should be column name,这通常意味着在SQL查询中,二元谓词(比如比较操作符 >=)的左侧表达式应该是一个列名,而不是一个常量或函数的结果。

    根据您提供的错误信息,问题出现在 dw_cdate >= concat(substr('2024-03-20', 1, 7), '-01') 这个条件中。看起来您试图构造一个日期范围来删除本月的数据,但是 concat 函数的使用方式可能不正确。

    为了解决这个问题,您可以尝试以下步骤:

    1. 首先,确保 dw_cdate 是一个列名。
    2. 其次,使用正确的日期函数来获取本月的第一天。在Doris中,您可以使用 DATE_FORMAT 函数来格式化日期。

    下面是一个示例SQL,它将删除 dw_cdate 在本月范围内的所有行:

    DELETE FROM your_table_name
    WHERE dw_cdate >= DATE_FORMAT(NOW(), '%Y-%m-01')
      AND dw_cdate <  DATE_FORMAT(NOW() + INTERVAL 1 MONTH, '%Y-%m-01');
    

    在这个示例中,your_table_name 应该替换为您实际的表名。这个查询将删除所有 dw_cdate 在本月第一天到下个月第一天之间的行。

    解释一下这个查询:

    • DATE_FORMAT(NOW(), '%Y-%m-01') 将当前日期格式化为本月的第一天(例如,如果今天是2024年3月20日,这将返回2024-03-01)。
    • NOW() + INTERVAL 1 MONTH 将当前日期增加一个月,然后 DATE_FORMAT(..., '%Y-%m-01') 将这个日期格式化为下个月的第一天(例如,如果今天是2024年3月20日,这将返回2024-04-01)。
    • dw_cdate >= DATE_FORMAT(NOW(), '%Y-%m-01') 确保 dw_cdate 是本月的日期。
    • dw_cdate < DATE_FORMAT(NOW() + INTERVAL 1 MONTH, '%Y-%m-01') 确保 dw_cdate 不是下个月的日期。

    请确保在执行删除操作之前备份您的数据,以防止意外数据丢失。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月15日
  • 已采纳回答 3月7日
  • 创建了问题 3月20日