【问题标题】:update field when max(BCASTdate -120)<= date当 max(BCASTdate -120)<= date 时更新字段
【发布时间】:2019-04-01 10:41:23
【问题描述】:

我有一个 sql 表,当 BC_DATE MINUS 120 天小于等于派生日期时,我需要将 MIGRATE 字段更新为“M” 这应该是我的输出

 BC_DATE        Migrate Flag
 2018-09-09       M
 2018-11-01       M
 2018-12-21       M
 2019-01-13      NULL
 2019-02-13      NULL
 2019-03-13      NULL

 declare @date int null
 set @date = '20190401'

 update table 
 set Migrate_flag = 'M'
 when max(convert(varchar,dateadd(day,-120,[BCAST DATE]),112)) < = @date

请更正我的更新语句以使其正常工作。

【问题讨论】:

  • [BCAST DATE]的数据类型是什么?

标签: sql tsql sql-server-2012


【解决方案1】:

我想你只是想要:

 update table 
     set Migrate_flag = 'M'
     where [BCAST DATE] < dateadd(day, -120, convert(date, convert(varchar(255), @date)));

没有理由将日期转换为字符串进行比较。

但是为什么你会让@date 成为int?您应该将其声明为 date:

declare @date date;
set @date = '20190401'

【讨论】:

  • 这是我得到的错误:消息 8115,级别 16,状态 2,第 27 行算术溢出错误将表达式转换为数据类型日期时间。该语句已终止。 BCAST DATE 采用这种格式 2019-03-01 日期采用这种格式 20190301
猜你喜欢
  • 2021-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-20
相关资源
最近更新 更多