Thiago Zavaschi R2 www.zavaschi.com

15Sep/095

LTRIMZERO e Dicas Rápidas

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

Comments (5) Trackbacks (0)
  1. Cara, muito bom. Me ajudou sua dica

  2. Fico feliz que tenha ajudado :)

  3. Perfeito!!!! Adorei!!!!

  4. Valeu cara, me ajudou demais!!!

  5. Show….simples mas perfeito…..parabens pela sacada…..


Leave a comment


No trackbacks yet.