我正在尝试使用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%'
答案 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
不够。right(p.policynum, 2)
并不比term
复杂得多。