I would like to know how to replace all characters between 2 dashes (-) and replace the dashes as well. It should be in a single select statement, not a loop. The text between the dashes can be variable length and any character. The characters before and after the dashes can also be variable length.
x
141911001-200-20 = 14191100120 // Replaced -200-
141911001-10-50 = 14191100150 // Replaced -10-
141911001-50-10 = 14191100110 // Replaced -50-
141911001-aaaa-85 = 14191100185 // Replaced --aaaa--
11111111111-bbbbb-4444 = 111111111114444 //Replace-bbbbb-
Advertisement
Answer
You can do it by using CHARINDEX, SUBSTRING and LEN
CREATE TABLE #TEMP
(
test_value VARCHAR(20)
)
INSERT INTO #TEMP
VALUES ('141911001-200-20')
,('141911001-10-50')
, ('141911001-50-10')
,('141911001-aaaa-85')
SELECT SUBSTRING(test_value, CHARINDEX('-', test_value), LEN(test_value)) AS subFirstDash -- Substring starts on the first dash (-) index
, CHARINDEX('-', SUBSTRING(test_value, CHARINDEX('-', test_value) + 1, LEN(test_value))) AS lastDashIndex -- Last dash(-) index from the previous substring
, SUBSTRING(SUBSTRING(test_value, CHARINDEX('-', test_value) + 1, LEN(test_value)), 0, CHARINDEX('-', SUBSTRING(test_value, CHARINDEX('-', test_value) + 1, LEN(test_value)))) AS btwDashes -- Value between dashes (-)
, REPLACE(test_value, '-' + SUBSTRING(SUBSTRING(test_value, CHARINDEX('-', test_value) + 1, LEN(test_value)), 0, CHARINDEX('-', SUBSTRING(test_value, CHARINDEX('-', test_value) + 1, LEN(test_value)))) + '-', '') AS new_value -- Value between dashes (-) replaced
, test_value AS original_value
FROM #TEMP
DROP TABLE #TEMP