Sql 用0s填充此字符串部分的最佳方法
以下是字符串当前外观的两个示例:Sql 用0s填充此字符串部分的最佳方法,sql,sql-server,Sql,Sql Server,以下是字符串当前外观的两个示例: 6731-121-1 9552-3-1 这就是我想让它们看起来的样子 0006731-121-1 0009552-003-1 所以我希望在第一个'-'之前加上7个零,然后在第一个'-'和第二个'-'之间加上3个零 在SQL SELECT语句中实现这一点的最佳方法是什么 SELECT RIGHT('0000000' + ISNULL( LEFT(O
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
ParseName可能是这里的一个选项 范例 返回
ParseName可能是这里的一个选项 范例 返回
在超过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
在超过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
我能够完成第一部分。。。。不确定这是否是最佳实践。这是我不确定的“-”之间的第二个填充。添加了第一个问题:SQL的哪个版本?是否总是由3部分组成?是的。总是三个部分然后我会同意约翰·卡佩莱蒂的答案。我能够完成第一部分。。。。不确定这是否是最佳实践。这是我不确定的“-”之间的第二个填充。添加了第一个问题:SQL的哪个版本?是否总是由3部分组成?是的。总是三个部分然后我会同意约翰·卡佩莱蒂的答案。我也在想同样的事情,只是速度不够快:-我从未见过PARSENAME被这样使用,但我有点喜欢这个想法。谢谢分享。@ZoharPeled我是复制粘贴的超级粉丝:我从来没有见过PARASENAME。再次感谢大家的分享。TILPARSENAME很棒,但我相信它只是SQL2012+,对吗?我也在想同样的事情,只是速度不够快:-我从未见过PARSENAME被这样使用,但我有点喜欢这个想法。谢谢分享。@ZoharPeled我是复制粘贴的超级粉丝:我从来没有见过PARASENAME。再次感谢大家的分享。TILPARSENAME很棒,但我相信它只是SQL2012+,对吗?
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