你应该将你的值分成4列(在每列中找到最大长度),然后添加前导/尾随零/空格,然后连接它。
这里是代码,以分割值,希望你将有加零和空间没有问题:
declare @v varchar(255) = '[email protected]'
select
FirstPart = left(@v, patindex('%[a-z][0-9]%', @v)),
SecondPart = substring(@v, patindex('%[0-9]%', @v), patindex('%[0-9][a-z]%', @v) - patindex('%[a-z][0-9]%', @v)),
ThirdPart = substring(@v, patindex('%[0-9][a-z]%', @v) + 1, len(@v) - patindex('%[0-9][a-z]%', @v) - patindex('%[0-9][a-z]%', reverse(@v))),
Fourthpart = right(@v, patindex('%[0-9][a-z]%', reverse(@v)))
注: - (?昵称)
patindex('%[a-z][0-9]%', @v)
山楂最后一封信
patindex('%[0-9][a-z]%', @v)
- 最后一位数字在第一个数字(104)
patindex('%[0-9][a-z]%', reverse(@v))
- 上一个号码的长度
您还可以使用CLR和正则表达式的值拆分组: https://github.com/zzzprojects/Eval-SQL.NET/wiki/SQL-Server-Regex-%7C-Use-regular-expression-to-search,-replace-and-split-text-in-SQL
好运气在与正则表达式和字符串函数纯SQL来实现这一目标。在存储过程中实现算法可能是您在数据库端执行该操作的唯一方法,但我宁愿使用真正的编程语言对其进行编码。 –
也许不是最好的报价,但我建议您查看您在数据库中存储数据的方式和方式。 –