用0填充此字符串部分的最佳方法

时间:2018-01-29 14:15:55

标签: sql sql-server

这是字符串当前的两个示例:

   6731-121-1
   9552-3-1

这就是我想要填充它们的样子

   0006731-121-1
   0009552-003-1

所以我希望在第一个' - '之前用7个零填充它们。然后在第一个和第二个之间有3个零 - ' - '

在SQL SELECT语句中实现此目的的最佳方法是什么。

 SELECT   RIGHT('0000000'
               + ISNULL(
                           LEFT(OE.exception_id, CHARINDEX('-', OE.exception_id)
                                                 - 1) ,
                           ''
                       ) ,7) + '-'
         + SUBSTRING(OE.exception_id, CHARINDEX('-', ( OE.exception_id )), 10) exception_id 

2 个答案:

答案 0 :(得分:5)

ParseName()可以是一个选项

示例

Declare @YourTable Table ([YourCol] varchar(50))
Insert Into @YourTable Values 
 ('6731-121-1')
,('9552-3-1')

Select *
      ,NewVal = right('0000000'+parsename(replace(YourCol,'-','.'),3),7)
               +'-'
               +right('000'+parsename(replace(YourCol,'-','.'),2),3)
               +'-'
               +parsename(replace(YourCol,'-','.'),1)
 From @YourTable

<强>返回

YourCol     NewVal
6731-121-1  0006731-121-1
9552-3-1    0009552-003-1

答案 1 :(得分:1)

超过3个周期的情况

示例:'1.2.3.4.5'

或任何值为空

3个例子:'1..3''1.2.3。''。2'

Parsename将为所有值返回null。您需要使用其他方法拆分列。

以下是parsename的替代方法:

DECLARE @table table(col varchar(100))
INSERT @table values('6731-121-1'),('9552-3-1')

SELECT 
  col,
  REPLICATE('0', 8-x) + STUFF(col, x+1, 0,REPLICATE('0', 4 - (y-x))) newcol
FROM @table
CROSS APPLY
  (SELECT CHARINDEX('-', col) x) x
CROSS APPLY
  (SELECT CHARINDEX('-', col + '-', x+1) y) y

col         newcol
6731-121-1  0006731-121-1
9552-3-1    0009552-003-1