这是一个静态查询,它显示了我要获取的位置
declare @Airbill VARCHAR(50) = '12345678912'
select stuff(stuff(@Airbill, 4, 0, '-'), 9, 0, '-')
但我需要让它变得更加可变。我有以下变量:
DECLARE @AirbillMask VARCHAR(50) = '999-9999-9999'
哪个可以(并且确实)改变。它始终是“9”和“-”。但是它们的位置发生了变化。
- 如果
@AirbillMask
是999-99-99-9999
我想要的结果将是123-45-67-8912
。 - 如果
@AirbillMask
是999-9999-9999
我想要的结果将是123-4567-8912
。
我正在运行dbo.FindPatternLocation(@AirbillMask, '-')返回破折号位置表。
我正计划找到一种方法将STUFF
的部分@Airbill
放入相应的位置以生成 的计算字段FormattedAirbill
,但我在尝试迭代STUFF
调用时遇到了困难。
有没有办法一遍又一遍地打电话给STUFF
另一个STUFF
电话,直到我不在行?
我觉得递归 CTE 或交叉应用可以实现这一点,但我似乎无法理解它。
注意:如果可能的话,我更愿意在不循环的情况下执行此操作。
你的例子是一个大整数所以假设这是典型的你可以使用
FORMAT
这个退货
如果无法更改掩码格式以使用
0
或#
代替9
它,显然可以在运行时使用所需字符轻松REPLACE
完成9
。我能够修改此答案以获得我正在寻找的内容:
我还没有对其进行性能测试,但我确实得到了正确的结果。