2016-09-08 2 views
-1

Я не уверен, как начать поиск ответа по моему вопросу. не можете найти правильные слова. Если вы можете указать мне в правильном направлении, это будет здорово.Измените данные, если они содержат дефис в SQLSERVER

В принципе, у меня проблема. У меня есть пример исходного значения: 929-123-12-1111, , но он также содержит значение 123 ---, если значение равно 123 --- то, что мне нравится делать, это обновить/изменить его на 123-000- 00-0000.

Это можно сделать в заявлении на выбор?

выберите numcode из таблицы

+0

ли 123-454-- действительный вход? Какая версия SQL Server у вас есть? – qxg

+0

im using sqlserver 2008. Если источник имеет значение 123-454--, я хочу изменить его на 123-454-00-0000 – CodeBleach

+0

Это не решение 'SELECT STUFF (STUFF (@ S, 5,0, ' 000 '), 9,0, '00') + '0000'' вы могли бы сделать что-то подобное –

ответ

1

Вы можете удалить все дефис, подушечка его с 0 и перекомпонуйте результат, как SUBSTRING(1, 3) + '-' + SUBSTRING(4, 3) + '-' ...

WITH T1 AS 
(
    SELECT *, REPLACE(Id, '-', '') AS IdNoHyphen 
    FROM (VALUES ('929-123-12-1111'), ('123---'), ('123-456--')) AS T(Id) 
), 
T2 AS 
(
    SELECT *, LEFT(IdNoHyphen + '00000000000', 12) AS Padded 
    FROM T1 
) 
SELECT SUBSTRING(Padded, 1, 3) + '-' 
    + SUBSTRING(Padded, 4, 3) + '-' 
    + SUBSTRING(Padded, 7, 2) + '-' 
    + SUBSTRING(Padded, 9, 4) 
FROM T2 
+0

Спасибо qxg, но это может быть проблемой. Я буду обновлять существующее представление в своей компании. Так что я не думаю, что смогу сделать часть REPLACE. Могу ли я сделать замену и наложить на один выбор? – CodeBleach

+0

Конечно, это немного сложнее для кода. – qxg

Смежные вопросы