SQL查询将前导0添加到列的一部分

时间:2016-03-03 17:59:24

标签: sql-server

我需要更新SQL中的列以添加前导零。问题是此列中包含多种格式的数据。

0047
0070-0336
0025-0145
0032-0008
0033-0196 Johnson EEOC Matter

我需要在最后4位之前添加零,或者更确切地说是在短划线之后,但是只需要添加4位数 - 4位数字(以及4 -4加alpha)的行。所以它看起来像:

0047
0070-00336
0025-00145
0032-00008
0033-00196 Johnson EEOC Matter

我已经尝试了几个UPDATE和RIGHT语句,但无法获得我需要的结果。

3 个答案:

答案 0 :(得分:3)

REPLACE

怎么样?
  SELECT REPLACE(YourField, '-', '-0');
  FROM YourTable

这将取代第一次出现的-

  SELECT STUFF(YourField, CHARINDEX('-', YourField), 1, '-0')

但是如果你有这种情况会失败

 0476       jhonso-jhonson   

答案 1 :(得分:1)

未经测试。请在执行真实数据之前对其进行测试。

UPDATE yourTable
SET col = SUBSTRING(col, 0, CHARINDEX('-', col)) 
    + '-0' + 
    SUBSTRING(col, CHARINDEX('-', col) + 1, LEN(col) - CHARINDEX('-', col))
WHERE col LIKE N'____-____%'

此选项仅过滤包含4个字符的行,后跟-,后跟4个字符,后跟任何内容。它按以下方式设置列:将字符从0设置为第一个-,添加-0(而不是-),然后将其余列值附加为他们是。

答案 2 :(得分:0)

您可以使用以下表达式:

SELECT IIF(CHARINDEX('-', @COL) <> 0, 
           STUFF(@COL, CHARINDEX('-', @COL), 1, '-0'), 
           @COL)

如果 4位--4位 4 -4 plus alpha 格式,这将取代 first ' - '带'-0'。