LTRIMZERO e Dicas Rápidas

By | 15/09/2009

Olá pessoal,

Surgiu a necessidade por parte de um desenvolvedor no projeto que eu estava trabalhando sobre:
“Como remover zeros a esquerda de um elemento do tipo VARCHAR?”.

Inicialmente pensei em usar alguma abordagem relacionada ao CONVERT para algum tipo numérico.
Contudo, não era possível pois poderia existir valores não-numéricos no valor (‘001’, ‘0A’, ‘AB12’, etc).
O jeito que resolvi foi o seguinte (se alguém já fez algo parecido, estou aberto a sugestões!),

Encapsulando em uma função escalar:

— Criando a função
CREATE FUNCTION dbo.LTrimZero
( @valor VARCHAR(MAX) )
RETURNS VARCHAR(MAX)
BEGIN
    RETURN REPLACE(LTRIM(REPLACE(@valor, ‘0’, ‘ ‘)), ‘ ‘, ‘0’);
END
GO

— Testes (perceba que estes “DECLARES” só funcionarão no SQL Server 2008+, para SQL Server 2005- utilize DECLARE + SET)
DECLARE @var VARCHAR(30) = ‘AAA’
DECLARE @var1 VARCHAR(30) = ‘000AAA’
DECLARE @var2 VARCHAR(30) = ‘000AA0A’
DECLARE @var3 VARCHAR(30) = ‘0000001’

SELECT
dbo.LTrimZero(@var) AS [Var],
dbo.LTrimZero(@var1) AS [Var1],
dbo.LTrimZero(@var2) AS [Var2],
dbo.LTrimZero(@var3) AS [Var3]

Perceba que o comportamento da função é bem simples:
1) Troca tudo por espaço (‘ ‘), inclusive os "0" que eu não posso remover.
2) Executa um LTrim, que remove todos os espaços em branco a esquerda do parâmetro. (Isso já responde outro questionamento que já me fizeram: “Porque não há o TRIM para o T-SQL, pois o RTRIM e o LTRIM sozinhos, supostamente, não teriam utilidade”. Eu gostaria que tivesse um TRIM sim, mas o LTRIM e o RTRIM sozinhos não são
3) E por fim troco todos os espaços (‘ ‘) por zero novamente.

Vejam que na saída do script não sumiu os “0” que deveriam permanecer:

Var                            Var1                           Var2                           Var3
————————- ————————– ————————– ————————–
AAA                            AAA                            AA0A                           1

—-

Agora duas dicas rápidas:

Muitos me perguntam (na verdade reclamam) sobre o “Edit Top 200 Rows”  (presente no SSMS 2008 e no SSMS 2008 R2) que substituiu o “Open Table” (SSMS 2005), dizendo que 200 linhas é pouco.

O motivo da troca é pelo fato de que: tabelas densamente povoadas (muitos registros) ao executar o “Open Table” poderia ocorrer no travamento do SQL Server Management Studio. Eu recomendo que esse valor seja mantido. Mas sim, é possível alterar este valor e até mesmo deixar com o mesmo comportamento do “Open Table” do SSMS 2005.

Para isso vá em: Tools –> Options –> SQL Server Object Explorer –> Commands e troquem o valor do “Value for Edit Top <n> Rows command” para o valor desejado. Ao colocar “0” será o mesmo que o “Open Table”, neste caso a opção no menu do SSMS será “Edit All Rows”.

Acredito que muitos já utilizem o SQL Server 2008 e que alguns (como eu) já brinquem com o CTP do R2, mas mesmo assim sempre acaba aparecendo alguma coisa que não haviamos visto, ou a necessidade de se aprofundar em algum tema.

Para tal existem os Training Kits que fornecem demonstrações, apresentações e hands-on para ensinar a nova tecnologia.
Em maio deste ano saiu o Training Kit do SQL Server 2008 (http://www.microsoft.com/downloadS/details.aspx?familyid=E9C68E1B-1E0E-4299-B498-6AB3CA72A6D7&displaylang=en), e é obrigatório para quem ainda não está por dentro da plataforma de dados da Microsoft.

A dica é que a versão atualmente disponível não é compatível com o Windows 7. Entrei em contato com o time que desenvolve o traing kit e me foi passado que no final de setembro já teremos uma versao compatível, e me passou um work-aroud temporário para funcionar no Win 7.

No training kit (após descompactá-lo) há uma série de arquivos chamados "Dependencies.xml", altere-os para que fiquem similares a:
<os type="Vista;Server" buildNumber="6000;6001;6002;7000;7001;7056;7057;7100;7600;">
O 7600 é a versão RTM do Windows 7. :)

E é isso pessoal, até a próxima!
Thiago Zavaschi

3 thoughts on “LTRIMZERO e Dicas Rápidas

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios são marcados com *