Удалить определенный символ из строки, где символ существует несколько раз - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть ссылка на клиента, которую мы используем для идентификации клиента при обработке определенных заданий. Он состоит из фамилии, почтового индекса с дефисом вместо пробела, а затем даты рождения в формате DATE, например;

JonesM11-1BD1978-05-05

Мне нужно удалить этот дефис из почтового индекса, так как мы не хотим, чтобы он переносился дальше, поэтому существующие данные, существующие таким образом, нуждаются в исправлении, чтобы соответствовать.

Я не могу придумать, как просто вытащить первую из трех одинаковых символов / символов из строки, не затрагивая другие.

Ответы [ 3 ]

0 голосов
/ 05 сентября 2018

Мне нравится ответ от @Salman, но здесь есть альтернатива. Мы можем попробовать соединить две половины строки вокруг первого дефиса, который является дефисом почтового индекса, который мы хотим удалить.

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

enter image description here

Демо

0 голосов
/ 05 сентября 2018

Вы можете использовать STUFF и CHARINDEX для достижения ваших требований,

SELECT STUFF (столбец, CHARINDEX («подстрока», столбец), LEN («подстрока»), «замена») ОТ # темп

поместите вашу строку вместо col, '-' в подстроку и оставьте пустым вместо, чтобы получить правильный ответ.

0 голосов
/ 05 сентября 2018

Просто используйте 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 |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...