Запрос, который позволяет убрать из строки все нецифровые символы:
REPLACE( TRANSLATE(@Phone,
REPLACE(TRANSLATE(@Phone, '0123456789', '##########'), '#', ''),
REPLICATE('#', LEN(REPLACE(TRANSLATE(@Phone, '0123456789', '##########'), '#', '') + 'x') - 1)
)
, '#', '')
Разобрался в этом запросе пошагово, кроме одного момента: зачем в блоке REPLICATE к длине сначала прибавляется один символ (+'x'), а затем из нее вычитается один символ (-1)? На первый взгляд какая-то бессмысленная операция. Я убрал +'x' и -1, когда подставлял в этот запрос тестовые строки (пример: 'ghgf+1*2-3YYU', NULL, ''), и все работает без прибавления и последующего вычитания символа. Но в боевом запросе выдает сообщение:
The second and third arguments of the TRANSLATE built-in function must contain an equal number of characters.