这是字符串当前的两个示例:
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
答案 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