【问题标题】:Error when adding case statement using date paramaters "Operand type clash: date is incompatible with int"使用日期参数添加 case 语句时出错“操作数类型冲突:日期与 int 不兼容”
【发布时间】:2019-04-24 01:23:31
【问题描述】:

我有一个查询,目标是允许用户通过开始和结束日期来选择范围内的客户销售。此外,还有两个子查询,一个获取客户的第一个订单日期,另一个获取所选日期范围之前客户的最后一个订单日期。

在我添加一个尝试根据新客户状态和客户重新登录状态创建一些客户分组的案例语句之前,查询工作正常。

我曾多次尝试重新设计子查询,但我认为问题出在 case 语句中。关于别名,当前配置有点混乱,子查询是堆叠的,不是单独连接的,所以命名约定很奇怪,但是在我尝试添加 case 语句之前,查询仍然有效。

不幸的是,我不知道可能是什么问题,所以任何帮助将不胜感激。案例陈述如下。

返回的错误是

操作数类型冲突:日期与 int 不兼容

代码:

CASE 
   WHEN LAST_ORD.FIRST_ORDER BETWEEN @START_DATE AND @END_DATE 
      THEN 'NEW IN SELECTED PERIOD'
   WHEN LAST_ORD.FIRST_ORDER <= @END_DATE - 365 
      THEN 'NEW IN LAST YEAR'
   WHEN LAST_ORD.LAST_ORDERED < @START_DATE - 730 
      THEN 'REBOARDED 2+Y INACTIVE'
   WHEN LAST_ORD.LAST_ORDERED < @START_DATE - 365 
      THEN 'REBOARDED 1+Y INACTIVE'
   ELSE 'ACTIVE CUSTOMER'
END AS CUST_HIST

【问题讨论】:

  • 您需要使用DATEADD(DAY 而不是-date 数据类型

标签: sql sql-server-2008


【解决方案1】:

你需要dateadd

CASE WHEN LAST_ORD.FIRST_ORDER BETWEEN @START_DATE AND @END_DATE THEN 'NEW IN SELECTED PERIOD'
   WHEN LAST_ORD.FIRST_ORDER <= DATEADD(day,- 365,@END_DATE ) THEN 'NEW IN LAST YEAR'
   WHEN LAST_ORD.LAST_ORDERED < DATEADD(day,- 730,@START_DATE )  THEN 'REBOARDED 2+Y INACTIVE'
   WHEN LAST_ORD.LAST_ORDERED < @DATEADD(day,- 365,@START_DATE )THEN 'REBOARDED 1+Y INACTIVE'
   ELSE 'ACTIVE CUS

【讨论】:

  • 谢谢 Zaynul,它成功了,我今天学到了一些新东西!
猜你喜欢
  • 2019-10-31
  • 2016-07-09
  • 1970-01-01
  • 2014-03-01
  • 1970-01-01
  • 2021-04-15
  • 1970-01-01
  • 1970-01-01
  • 2011-11-02
相关资源
最近更新 更多