从字符中多次存在的字符串中删除特定字符

时间:2018-09-05 13:46:22

标签: sql sql-server string replace

我有一个客户参考,在处理某些工作时,我们在内部使用该参考来识别客户。它由姓氏,邮政编码和连字符(而不是空格)组成,然后由DATE格式的出生日期组成,例如;

JonesM11-1BD1978-05-05

我需要从邮政编码中删除该连字符,因为我们不希望以后连字符,因此以这种方式存在的现有数据需要更正以匹配。

我不太了解如何从一个字符串中拔出相同字符/符号的三个中的第一个而不影响其他字符。

3 个答案:

答案 0 :(得分:4)

只需使用CHARINDEX来获取第一个连字符的位置,并使用STUFF来替换字符:

WITH testdata(str) AS (
    SELECT 'JonesM11-1BD1978-05-05'
)
SELECT 
    str, STUFF(str, CHARINDEX('-', str), 1, '') AS str_fixed
FROM testdata

结果:

| str                    | str_fixed             |
|------------------------|-----------------------|
| JonesM11-1BD1978-05-05 | JonesM111BD1978-05-05 |

答案 1 :(得分:2)

我喜欢@Salman给出的答案,但这是另一种选择。我们可以尝试将第一个连字符的字符串的两半拼凑在一起,这是我们要删除的邮政编码连字符。

SELECT
    str,
    LEFT(str, CHARINDEX('-', str) - 1) +
        RIGHT(str, LEN(str) - CHARINDEX('-', str)) AS str_fixed
FROM testdata;

enter image description here

Demo

答案 2 :(得分:1)

您可以使用STUFF和CHARINDEX来满足您的要求,

SELECT STUFF(col,CHARINDEX('substring',col),LEN('substring'),'replacement') 从#temp

将您的字符串替换为col,将“-”替换为子字符串,并将其替换为空白以得到正确的答案。