Posts Tagged ‘varchar’

Resposta Desafio – CHAR X VARCHAR

Posted in Programação on March 16th, 2010 by Silas Mendes – Be the first to comment

Primeiro tenho que registrar que boa parte das pessoas pra quem enviei o desafio responderam corretamente. Achei interessante a interação e o clima da brincadeira; agora tá na hora de oficializar a resposta. Vamos lá:

Normalmente, quando questionam a diferença entre CHAR e VARCHAR a primeira resposta é: um tem tamanho fixo, o outro tem tamanho variável. Mas já que o CHAR tem tamanho fixo, o que acontece quando inserimos um dado que não ocupa todo o espaço reservado? E além disso, quando inserimos um dado num campo CHAR em qual direção o dado é inserido?

Então, ninguém melhor que o Books Online para responder:

Se um valor mais curto que o comprimento da coluna for inserido em uma coluna char NOT NULL, o valor será preenchido à direita, com espaços em branco, até atingir o tamanho da coluna. Por exemplo, se uma coluna estiver definida como char(10) e os dados a serem armazenados forem “music”, o SQL Server armazenará os dados como “music_____”, onde “_” indica um espaço em branco.

Fonte: http://msdn.microsoft.com/pt-br/library/ms175055.aspx

Com as considerações acima, podemos resumir a consulta do desafio a isto:

SELECT
RIGHT('05 ',2) as 'CHAR',
RIGHT('05' ,2) as 'VARCHAR'

Como a função RIGHT está extraindo duas posições à direita (contando com o espaço em branco), o Zero (0) do CHAR é ignorado no resultado.

Valeu pela participação dos amigos, em especial a do amigo Léo Lopes que contribuiu na elaboração da resposta utilizando referências do BOL :)

Desafio T-SQL – CHAR X VARCHAR

Posted in Programação on March 10th, 2010 by Silas Mendes – 5 Comments

Hoje a tarde meu amigo Adilson Pereira me mandou um desafio bem interessante, vou postar aqui exatamente do modo como ele propôs:

Observem a diferença que dá no resultado de um comando usando o CHAR e o VARCHAR:

declare @data datetime
set @data = '20100310 05:05:05'
SELECT
RIGHT('0' + CONVERT(   CHAR(2), DATEPART(mi, @data)), 2) as 'CHAR',
RIGHT('0' + CONVERT(VARCHAR(2), DATEPART(mi, @data)), 2) as 'VARCHAR' 

A solução é interessante :)

E você? Tem um palpite do porque?