Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 用0s填充此字符串部分的最佳方法_Sql_Sql Server - Fatal编程技术网

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