【发布时间】:2020-02-04 16:21:49
【问题描述】:
我有类似的交易代码
"A0004", "1B2005","20CCCCCCC21"
我需要提取最右边的数字并将交易代码加一
"AA0004"----->"AA0005"
"1B2005"------->"1B2006"
"20CCCCCCCC21"------>"20CCCCCCCC22"
在 SQL Server 2012 中。
- 字符串长度未知
- right(n?) 总是编号
处理不重要的字符串和数字长度超出了我的范围。 总是缺少一些逻辑。
LEFT(@a,2)+RIGHT('000'+CONVERT(NVARCHAR,CONVERT(INT,SUBSTRING( SUBSTRING(@a,2,4),2,3))+1)),3
【问题讨论】:
-
另一个很好的例子,为什么你不应该在同一列中组合不同类型的信息
-
SELECT REVERSE(LEFT(REVERSE('20CCCCCCCC12345'), PATINDEX('%[^0-9]%', REVERSE('20CCCCCCCC12345')) - 1))。现在你知道为什么你永远不想在 T-SQL 中进行字符串操作了。增加它作为一个数字 并将其返回原始位数留给读者作为练习(这也不是野餐)。如果可能的话,在插入到自己的列中时提取这些数据。痛苦只有一次,然后你就会永远受益。
标签: sql sql-server string tsql increment