我有一个客户参考,在处理某些工作时,我们在内部使用该参考来识别客户。它由姓氏,邮政编码和连字符(而不是空格)组成,然后由DATE格式的出生日期组成,例如;
JonesM11-1BD1978-05-05
我需要从邮政编码中删除该连字符,因为我们不希望以后连字符,因此以这种方式存在的现有数据需要更正以匹配。
我不太了解如何从一个字符串中拔出相同字符/符号的三个中的第一个而不影响其他字符。
答案 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;
答案 2 :(得分:1)
您可以使用STUFF和CHARINDEX来满足您的要求,
SELECT STUFF(col,CHARINDEX('substring',col),LEN('substring'),'replacement') 从#temp
将您的字符串替换为col,将“-”替换为子字符串,并将其替换为空白以得到正确的答案。