Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从VARCHAR到INT的转换失败_Sql_Sql Server - Fatal编程技术网

Sql 从VARCHAR到INT的转换失败

Sql 从VARCHAR到INT的转换失败,sql,sql-server,Sql,Sql Server,我正在尝试使用SQL获取基于现有策略编号的新策略编号。我不想使用update,因为我不想永久更改记录 我的保单编号类似于PFA991228-01,我想使用SQL修改并获取PFA991228-02。所以我只是更新最后两位数字,从00到01或从05到06等等。现在我得到了将varchar转换为int的错误 我是SQL新手,所以不确定是否可以在第一个select语句中实现它,而不是使用子查询 select left(p.policynum, 9) + '-' + right('00' + con

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

我的保单编号类似于PFA991228-01,我想使用SQL修改并获取PFA991228-02。所以我只是更新最后两位数字,从00到01或从05到06等等。现在我得到了将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%' 

我想提出这样的逻辑:

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位后缀。 我看不出子查询的理由。例如,2实际上并不比术语复杂多少。
尝试仅执行子选择,并查看是否存在无法转换为INT的“Term”值。潜在的add…此逻辑取决于9位数的策略号。如果它们较长/较短,则需要使用patindex来检测“-”的位置,然后从该位置使用left。leftp.policynum,patindexp.policynum,'-'-1…我想这是对的…我的括号可能已经掉了。谢谢我用你的括号修改了我当前的代码并得到了想要的结果。