none
Replace não está funcionando. RRS feed

  • Pergunta

  • SQL Express 2005

    Eu estou dando um select em uma tabela do excel da seguinte forma:

    SELECT REPLACE([LimiteTol], '', 0) FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0','Data Source=C:\Limites.xls;Extended Properties=EXCEL 8.0')...[Ultragrid1$] where [LimiteTol]='';

    Só que ele não está trocando o '' por 0 nem por nada... Oq pode ser? tem uns 17 campos com '' e não são nulos pois se eu coloco o where para is null ele não pega nem uma linha... Já estou ficando louco 8\

    Agradeço se alguém souber oq pode ser isso e como se resolve...

    PS. Gostaria de saber a causa disso :)

    PS2. Aparentemente as planilhas estão armazenando números como texto inclusive esses campos em branco. Porém infelizmente eu não posso alterar isso pois a tabela é gerada por outra aplicação que não é minha :/

    domingo, 9 de maio de 2010 19:40

Respostas

  • O null do excel é diferente do Null no SQl server. Para que sua lógica funcione utilizeo comando

    Case When Then End no select

    SELECT [LimiteTol] = Case LEN([LimiteTol]) When 0 Then '0' Else [LimiteTol] End FROM OPENDATASOURCE
    ('Microsoft.Jet.OLEDB.4.0','Data Source=D:\Limites.xls;Extended Properties=EXCEL 8.0')...[Ultragrid1$]

    Traduzindo:

    Quando o tamanho for 0 jogue 0 caso contrario traga o valor

    Não esqueça de marcar como resposta se for útil

    Thiago Moura

    J.N. Moura Informatica LTDA ME

    segunda-feira, 10 de maio de 2010 14:40

Todas as Respostas

  • Cara pode ser que a coluna esteja com espaços. Como no sql server não há o comando Trim utilize  Replace(ltrim(rtrim(LimiteTol)),'',0).

     

     

     

     

     

    Thiago De Carvalho Moura

    J.N. Moura Informática LTDA -ME

    segunda-feira, 10 de maio de 2010 11:29
  • Nada... O pior é que é = a '' pois eu coloquei um Where='' logo não tem espaços nem nada...

     

    Abaixo o XLS e o comando que estou usando:

    SELECT REPLACE([LimiteTol], '', 0) FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0','Data Source=C:\Limites.xls;Extended Properties=EXCEL 8.0')...[Ultragrid1$] where [LimiteTol]='';

    http://www.airtongomes.com.br/limites.xls

    segunda-feira, 10 de maio de 2010 12:43
  • O null do excel é diferente do Null no SQl server. Para que sua lógica funcione utilizeo comando

    Case When Then End no select

    SELECT [LimiteTol] = Case LEN([LimiteTol]) When 0 Then '0' Else [LimiteTol] End FROM OPENDATASOURCE
    ('Microsoft.Jet.OLEDB.4.0','Data Source=D:\Limites.xls;Extended Properties=EXCEL 8.0')...[Ultragrid1$]

    Traduzindo:

    Quando o tamanho for 0 jogue 0 caso contrario traga o valor

    Não esqueça de marcar como resposta se for útil

    Thiago Moura

    J.N. Moura Informatica LTDA ME

    segunda-feira, 10 de maio de 2010 14:40
  • Muito obrigado! deu certo aqui.

    segunda-feira, 10 de maio de 2010 17:21