none
Converter Varchar em Char ou Vice versa RRS feed

  • Pergunta

  • Ola, bom dia..

     

    Gostava que me tirassem um duvida. Estou utilizando o SSIS e no processo ETL estou a realizar o carregamento do meu Data Mart... NO entanto deparei-me com um problema chato, mesmo chato. É o seguinte, eu depois de carregar a minha tabela dimensão Produto (IDProduto int (Incremental), e CodProduto CHAR(40), ...) para cada código de produto ele criar um ID. mas aqui nenhum problema. O problema é que ao comparar o CodProduto com o CodProduto (Varchar18) de uma outra tabela que vai dar origem a tabela de factos, nao está dando para comparar, e ao carregar a tabela de factos aparece IDProduto = NULL.

    Isto acontece porque o tipo de dados, do codigoprodutoé diferente nas duas tabelas. Ja coloquei antes do MERGE JOIN, um data convert para cada um, de  modos a colocar no mesmo tipo de dados, mas continua a não da na mesma.

     

    Alguem sugere alguma coisas para conseguir resolver este problema.


    • Editado sql-enthusiast segunda-feira, 16 de janeiro de 2012 11:32
    • Movido Gustavo Maia Aguiar segunda-feira, 16 de janeiro de 2012 13:25 (De:SQL Server - Desenvolvimento Geral)
    segunda-feira, 16 de janeiro de 2012 11:21

Todas as Respostas

  • Cara, não sei se ajuda, mas sempre que vou comparar campos da classe char (char, varchar, nchar, nvarchar, etc.) costumo utilizar a função UPPER() para tirar eventuais problemas com maiúsculas e minúsculas.

    Vê se soluciona o problema.

    Abraços.


    Carlos Eduardo B Martins Junior
    e-mail: kdu.bmartins@gmail.com
    skype: cmartins.othink
    segunda-feira, 16 de janeiro de 2012 14:16
  • Eu posso comparar um Char(40) com um varchar(18)? ...sabendo que o que estou a comparar é igual dos dois lados.
    segunda-feira, 16 de janeiro de 2012 14:24
  • Imaginemos eu estou a comparar um cod produto '10031700          ' com '10031700                            '.. devolve null...nao sei porque
    segunda-feira, 16 de janeiro de 2012 14:51
  • Mas o Cod. do Produto é sempre um número como nesse exemplo? Se sim, é mais fácil converter os dois campos para BigInt por exemplo, e depois comparar.
    Carlos Eduardo B Martins Junior
    e-mail: kdu.bmartins@gmail.com
    skype: cmartins.othink
    segunda-feira, 16 de janeiro de 2012 19:54
  • ja resolvi acho, com o rtrim
    • Sugerido como Resposta Kdu Bonalume terça-feira, 17 de janeiro de 2012 11:50
    segunda-feira, 16 de janeiro de 2012 21:21
  • Boa. Mas pensa bem se é realmente necessário que seus campos de código sejam da família CHAR... Se for sempre um numeral, é mais confiável e padronizado usar algo da família INT.

    Abraços.


    Carlos Eduardo B Martins Junior
    e-mail: kdu.bmartins@gmail.com
    skype: cmartins.othink
    terça-feira, 17 de janeiro de 2012 11:50