Movendo uma aplicação do Oracle para o SQL Server, tenho este pseudo Oracle PL/SQL:
SELECT LTRIM(MyColumn, '-, ') FROM MyTable
Ou seja, estou usando o OracleLTRIM
com um segundo argumento, especificando os caracteres a serem cortados do lado esquerdo da string.
Infelizmente, a versão T-SQL doLTRIM
não me permite especificar os caracteres a serem cortados.
Atualmente, não tenho ideia de como migrar esse arquivo LTRIM
. Estou até pensando em processar os resultados no meu aplicativo C# de hospedagem, depois de ler o arquivo MyColumn
.
Isso me parece bastante deselegante.
Minha pergunta:
Existe alguma maneira significativa de obter uma LTRIM
funcionalidade semelhante ao T-SQL para passar os caracteres para aparar?
Editar 1:
Eu preciso substituir -
, ,
e desde o início da string.
Por exemplo:
-----, ,,, This is ,- a test,---,
resultaria em
This is ,- a test,---,
Edição 2:
Espero fortemente que isso não seja um problema XY .
Talvez reescrever toda a minha consulta removeria LTRIM
completamente a necessidade, embora eu prefira me concentrar em portá-la como 1:1 possível e depois questionar a utilidade do LTRIM
.
Eeeee.
Pegue o sufixo da string começando pelo primeiro caractere que não é um espaço, vírgula ou hífen:
Resultado:
Observe que o hífen, já que é um caractere especial em expressões regulares que significa 'intervalo' (por exemplo
[a-z]
, ), deve ser o primeiro ([^- ,]
) ou o último ([^ ,-]
).Eu não acho que você ficará feliz com esta solução em comparação com a da Oracle,
ltrim
mas ela faz o que você deseja.rextester: http://rextester.com/IXOL62563
Não posso dizer se esta é a melhor solução, mas isso pode ser feito com
SUBSTRING
,CHARINDEX
,LEFT
,LTRIM
eREPLACE
. Estou assumindo que você está trabalhando com 8000 ou menos caracteres.Código de teste:
Resultado:
Abaixo está uma explicação de cada parte. Adicionei um "Z" no final para tratar do caso em que a string possui apenas os caracteres que precisam ser removidos. Primeiro remova todas as vírgulas:
Deletar tudo -:
Remova os espaços acolchoados da esquerda:
Pegue o primeiro caractere que não seja espaço, vírgula ou -:
Encontre a posição do primeiro caractere que não seja espaço, vírgula ou -:
Pegue a substring começando na posição que encontramos: