Tenha uma tabela grande com valores de campo varchar(100) - OrderNum assim:
"BO2003056-2"
Precisa extrair todos os caracteres numéricos deste campo para junções subsequentes a outra tabela.
Ex: "BO2003056-2" se transformaria em "20030562"
Como o RegEx não existe nativamente no TSQL, qual é a maneira mais rápida de fazer isso no TSQL?
SQL 2019 (modo de compatibilidade de banco de dados 2014)
Algo assim, pode ser:
Você terá que testar por si mesmo se este é "o mais rápido", mas provavelmente é o método mais simples.
Observe que na versão do SQL Server
TRANSLATE()
o terceiro argumento (a cadeia de caracteres de substituição) deve ter o mesmo comprimento que o segundo argumento (os caracteres a serem substituídos).Você pode evitar ter que contar todos os caracteres que deseja remover:
Em outros SGBDs o terceiro argumento pode ser mais curto, e os caracteres para os quais não há substituições serão simplesmente deletados, tornando esta abordagem ainda menos complicada. Por exemplo, no Postgres: