none
Criar exceção na consulta SQL em registros invalidos RRS feed

  • Pergunta

  • Bom dia, estou precisando de uma ajuda com o caso abaixo

    tenho um select que precisa converter um campo text em uma data, o padrão que os usuários devem colocar é dd/mm/yyyy, quando essa premissa é atendida eu consigo rodar a consulta normalmente, porem se o usuário erra a consulta retorna o seguinte erro

    Mensagem 241, Nível 16, Estado 1, Linha 1
    Conversion failed when converting date and/or time from character string.

    a ideia e que quando não conseguir gerar a conversão, a consulta seja realizada normalmente e que seja informado no campo DATA INVALIDA, alguem poderia me ajudar? segue abaixo a consulta

    parte que precisa criar o tratamento: 

    CONVERT(DATE, substring((InformacaoAdicionalProcesso.Observacoes),1,10),103) as DatadaFaseaserCobrada,

    consulta completa

    select 
    Processo.NumeroProcessoCliente as GPROC,
    (select top 1 InformacaoAdicionalProcesso.InformacaoAdicional from InformacaoAdicionalProcesso where InformacaoAdicionalProcesso.codigoprocesso = Processo.CodigoProcesso and InformacaoAdicionalProcesso.CodigoTipoInfoAddProcesso = 25) as Sinistro,
    Processo.NumeroProcesso as Processo,
    Municipio.Nome as Comarca,
    Municipio.SiglaUF as UF,
    CONVERT(DATE, substring((InformacaoAdicionalProcesso.Observacoes),1,10),103) as DatadaFaseaserCobrada,
    substring(InformacaoAdicionalProcesso.InformacaoAdicional,1,2) as Grupo,
    InformacaoAdicionalProcesso.InformacaoAdicional as FaseaserCobrada,
    (select top 1 InformacaoAdicionalProcesso.InformacaoAdicional from InformacaoAdicionalProcesso where InformacaoAdicionalProcesso.codigoprocesso = Processo.CodigoProcesso and InformacaoAdicionalProcesso.CodigoTipoInfoAddProcesso = 104) as MeritodaAcao,
    processo.ValorCausa as ValorPleiteado,
    processo.ValorRisco as ValorPago,
    InformacaoAdicionalProcesso.alteracaousuario as usuario
    from InformacaoAdicionalProcesso InformacaoAdicionalProcesso
    inner join Processo Processo on Processo.CodigoProcesso = InformacaoAdicionalProcesso.CodigoProcesso
    inner join Vara Vara on Vara.CodigoVara = Processo.CodigoVara
    inner join Forum Forum on Forum.CodigoForum = Vara.CodigoForum
    inner join Municipio Municipio on Municipio.CodigoMunicipio = Forum.CodigoMunicipio
    Where InformacaoAdicionalProcesso.CodigoTipoInfoAddProcesso = 103
    order by InformacaoAdicionalProcesso.alteracaodatahora desc




    terça-feira, 15 de setembro de 2015 12:17

Respostas

  • consegui resolver, segue a solução

    obg a todos

    SET DATEFORMAT dmy;
    select 
    Processo.NumeroProcessoCliente as GPROC,
    (select top 1 InformacaoAdicionalProcesso.InformacaoAdicional from InformacaoAdicionalProcesso where InformacaoAdicionalProcesso.codigoprocesso = Processo.CodigoProcesso and InformacaoAdicionalProcesso.CodigoTipoInfoAddProcesso = 25) as Sinistro,
    Processo.NumeroProcesso as Processo,
    Municipio.Nome as Comarca,
    Municipio.SiglaUF as UF,
    case when IsDate(substring(InformacaoAdicionalProcesso.Observacoes,1,10)) = 1
        then CONVERT(DATE, substring(InformacaoAdicionalProcesso.Observacoes,1,10),103)
    end as DatadaFaseaserCobrada,
    substring(InformacaoAdicionalProcesso.InformacaoAdicional,1,2) as Grupo,
    InformacaoAdicionalProcesso.InformacaoAdicional as FaseaserCobrada,
    (select top 1 InformacaoAdicionalProcesso.InformacaoAdicional from InformacaoAdicionalProcesso where InformacaoAdicionalProcesso.codigoprocesso = Processo.CodigoProcesso and InformacaoAdicionalProcesso.CodigoTipoInfoAddProcesso = 104) as MeritodaAcao,
    processo.ValorCausa as ValorPleiteado,
    processo.ValorRisco as ValorPago,
    InformacaoAdicionalProcesso.alteracaousuario as usuario
    from InformacaoAdicionalProcesso InformacaoAdicionalProcesso
    inner join Processo Processo on Processo.CodigoProcesso = InformacaoAdicionalProcesso.CodigoProcesso
    inner join Vara Vara on Vara.CodigoVara = Processo.CodigoVara
    inner join Forum Forum on Forum.CodigoForum = Vara.CodigoForum
    inner join Municipio Municipio on Municipio.CodigoMunicipio = Forum.CodigoMunicipio
    Where InformacaoAdicionalProcesso.CodigoTipoInfoAddProcesso = 103


    • Marcado como Resposta Wagner Sena PE terça-feira, 15 de setembro de 2015 13:24
    terça-feira, 15 de setembro de 2015 13:24

Todas as Respostas

  • Bom dia,

    Experimente utilizar a função IsDate mais ou menos como segue:

    case when IsDate(substring(InformacaoAdicionalProcesso.Observacoes,1,10)) = 1
        then CONVERT(DATE, substring((InformacaoAdicionalProcesso.Observacoes),1,10),103) 
    end as DatadaFaseaserCobrada,

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    terça-feira, 15 de setembro de 2015 12:35
  • se utilizar desta forma varias datas que apareciam antes deixam de aparacer

    o campo datafasecobrada2 vem da forma antiga fazendo direto

    o campo datafaseasercobrada vem do seu exemplo e observacoes e campo sem nenhum tratamento, o que ocorre e que fica vazio nesse exemplo que me enviou

    terça-feira, 15 de setembro de 2015 12:50
  • pelo o que estou entendendo ele está gerando apenas de datas que o dia esteja ate o dia 12, por que ele está fazendo com que o dia seja o mês, como posso resolver isso?
    terça-feira, 15 de setembro de 2015 13:07
  • consegui resolver, segue a solução

    obg a todos

    SET DATEFORMAT dmy;
    select 
    Processo.NumeroProcessoCliente as GPROC,
    (select top 1 InformacaoAdicionalProcesso.InformacaoAdicional from InformacaoAdicionalProcesso where InformacaoAdicionalProcesso.codigoprocesso = Processo.CodigoProcesso and InformacaoAdicionalProcesso.CodigoTipoInfoAddProcesso = 25) as Sinistro,
    Processo.NumeroProcesso as Processo,
    Municipio.Nome as Comarca,
    Municipio.SiglaUF as UF,
    case when IsDate(substring(InformacaoAdicionalProcesso.Observacoes,1,10)) = 1
        then CONVERT(DATE, substring(InformacaoAdicionalProcesso.Observacoes,1,10),103)
    end as DatadaFaseaserCobrada,
    substring(InformacaoAdicionalProcesso.InformacaoAdicional,1,2) as Grupo,
    InformacaoAdicionalProcesso.InformacaoAdicional as FaseaserCobrada,
    (select top 1 InformacaoAdicionalProcesso.InformacaoAdicional from InformacaoAdicionalProcesso where InformacaoAdicionalProcesso.codigoprocesso = Processo.CodigoProcesso and InformacaoAdicionalProcesso.CodigoTipoInfoAddProcesso = 104) as MeritodaAcao,
    processo.ValorCausa as ValorPleiteado,
    processo.ValorRisco as ValorPago,
    InformacaoAdicionalProcesso.alteracaousuario as usuario
    from InformacaoAdicionalProcesso InformacaoAdicionalProcesso
    inner join Processo Processo on Processo.CodigoProcesso = InformacaoAdicionalProcesso.CodigoProcesso
    inner join Vara Vara on Vara.CodigoVara = Processo.CodigoVara
    inner join Forum Forum on Forum.CodigoForum = Vara.CodigoForum
    inner join Municipio Municipio on Municipio.CodigoMunicipio = Forum.CodigoMunicipio
    Where InformacaoAdicionalProcesso.CodigoTipoInfoAddProcesso = 103


    • Marcado como Resposta Wagner Sena PE terça-feira, 15 de setembro de 2015 13:24
    terça-feira, 15 de setembro de 2015 13:24