转换失败,从VARCHAR到INT

时间:2018-03-20 20:14:22

标签: sql sql-server

我正在尝试使用SQL来获取基于现有策略编号的新策略编号。我不想使用更新,因为我不想永久更改记录。

我的政策编号类似于 PFA991228-01 ,我想使用SQL修改并获取 PFA991228-02 。所以我只是更新00到01或05到06等的最后2位数。现在我收到将varchar转换为int的错误。

我是SQL的新手,所以不确定我是否可以在我的第一个select语句中实现它而不是使用子查询

select 
left(p.policynum, 9) 
+ '-' 
+ right('00' + convert(varchar(255), right(p.policynum, 2) + 1), 2) as newPolicy
From Company55.dbo.policy p
where p.policynum not like '%S%' 

1 个答案:

答案 0 :(得分:2)

我会建议这个逻辑:

select (left(p.policynum, 9) + '-' +
        right( '00' + try_convert(int, right(p.policynum, 2)) + 1 as varchar(255)), 2) as newPolicy
From Company55.dbo.policy P 
where p.policynum not like '%S%' and
      p.policynum like '%[0-9][0-9]';

注意:

  • where确保输出行全部以两位数结尾。
  • try_convert()确保转换为整数成功 - where不够。
  • 适用于1位和2位数的后缀。
  • 我认为子查询没有理由。例如,right(p.policynum, 2)并不比term复杂得多。