none
Converter Varchar para Data RRS feed

  • Pergunta

  • Como converter uma data no SQL que está desta forma '20091027165650' para ficar desta forma '27/10/2009'?

    quais comando uso e como ficaria o select?

    Herbert Jone

    sexta-feira, 10 de junho de 2016 18:44

Respostas

  • testa aí 

    SELECT DISTINCT  
    est.CD_SIF, 
    mun.CD_MUNICIPIO, 
    mun.NM_MUNICIPIO, 
    ativ.DS_ATIVIDADE, 
    ativ.DS_CATEGORIA,
    est.CD_CNPJ,
    convert(varchar,right(aticad.DT_ALTERACAO,2) + '/' + SUBSTRING(aticad.DT_ALTERACAO,5, 2) +'/' + left(aticad.DT_ALTERACAO,4),102) as DT_ALTERACAO_2, 
    convert(varchar,right(aticad.DT_CONCESSAO,2) + '/' + SUBSTRING(aticad.DT_CONCESSAO,5, 2) +'/' + left(aticad.DT_CONCESSAO,4),102) as DT_CONCESSAO_2, 
    est.NM_RAZAO_SOCIAL,
    aticad.CD_INATIVO

    FROM         dbo.ESTABELECIMENTOS AS est INNER JOIN
                          dbo.MUNICIPIOS AS mun ON est.ID_MUNICIPIO = mun.ID_MUNICIPIOS INNER JOIN
                          dbo.ATIV_CATEGORIAS AS aticad ON est.ID_ESTABELECIMENTO = aticad.ID_ESTABELECIMENTO INNER JOIN
                          dbo.ATIVIDADES AS ativ ON aticad.ID_ATIVIDADE = ativ.ID_ATIVIDADE
     
    WHERE 
    est.cd_sif like'%ES%'

    • Sugerido como Resposta Edvaldo A sexta-feira, 10 de junho de 2016 19:54
    • Marcado como Resposta Thales F Quintas segunda-feira, 13 de junho de 2016 16:51
    sexta-feira, 10 de junho de 2016 19:41
  • O campo CD_INATIVO provavelmente é varchar ou nvarchar,

    Coloque entre aspas ('') os números tbm

    tipo = case aticad.CD_INATIVO
             WHEN '0' THEN 'Ativo'
             WHEN '1' THEN 'Inativo'
             WHEN '2' THEN 'Pendente'
             WHEN '9' THEN 'Incompleto'
             WHEN 'C' THEN 'Cancelado'
             WHEN 'S' THEN 'Suspenso'
            end


    • Editado Edvaldo A segunda-feira, 13 de junho de 2016 16:43 .
    • Sugerido como Resposta Edvaldo A segunda-feira, 13 de junho de 2016 16:48
    • Marcado como Resposta Thales F Quintas segunda-feira, 13 de junho de 2016 16:52
    segunda-feira, 13 de junho de 2016 14:25

Todas as Respostas

  • Veja se ajuda

     select convert(date,right('20091027',2) + '/' + SUBSTRING('20091027',5, 2) +'/' + left('20091027',4)) as Data

    sexta-feira, 10 de junho de 2016 19:15
  • Edvaldo,

    Primeiramente obrigado pela ajuda, mas para ficar mais claro para vc entender minha situação

    tenho o select abaixo...

    SELECT DISTINCT  
    est.CD_SIF, 
    mun.CD_MUNICIPIO, 
    mun.NM_MUNICIPIO, 
    ativ.DS_ATIVIDADE, 
    ativ.DS_CATEGORIA,
    est.CD_CNPJ, 
    aticad.DT_ALTERACAO,
    aticad.DT_CONCESSAO,
    est.NM_RAZAO_SOCIAL,
    aticad.CD_INATIVO

    FROM         dbo.ESTABELECIMENTOS AS est INNER JOIN
                          dbo.MUNICIPIOS AS mun ON est.ID_MUNICIPIO = mun.ID_MUNICIPIOS INNER JOIN
                          dbo.ATIV_CATEGORIAS AS aticad ON est.ID_ESTABELECIMENTO = aticad.ID_ESTABELECIMENTO INNER JOIN
                          dbo.ATIVIDADES AS ativ ON aticad.ID_ATIVIDADE = ativ.ID_ATIVIDADE
     
    WHERE 
    est.cd_sif like'%ES%'

    Onde aticad.DT_ALTERACAO e aticad.DT_CONCESSAO  são datas e no resultado eles veem neste formato '20091027165650' '20091123143927'.

    Seria possivel no select fazer esses resultados virem 27/10/2009 e 23/11/2009?

    sexta-feira, 10 de junho de 2016 19:24
  • Eu novato em SQL e o que vc me enviou me deixou meio confuso..rs

    Obrigado, mais uma vez.

    Herbert Jone

    sexta-feira, 10 de junho de 2016 19:25
  • testa aí 

    SELECT DISTINCT  
    est.CD_SIF, 
    mun.CD_MUNICIPIO, 
    mun.NM_MUNICIPIO, 
    ativ.DS_ATIVIDADE, 
    ativ.DS_CATEGORIA,
    est.CD_CNPJ,
    convert(varchar,right(aticad.DT_ALTERACAO,2) + '/' + SUBSTRING(aticad.DT_ALTERACAO,5, 2) +'/' + left(aticad.DT_ALTERACAO,4),102) as DT_ALTERACAO_2, 
    convert(varchar,right(aticad.DT_CONCESSAO,2) + '/' + SUBSTRING(aticad.DT_CONCESSAO,5, 2) +'/' + left(aticad.DT_CONCESSAO,4),102) as DT_CONCESSAO_2, 
    est.NM_RAZAO_SOCIAL,
    aticad.CD_INATIVO

    FROM         dbo.ESTABELECIMENTOS AS est INNER JOIN
                          dbo.MUNICIPIOS AS mun ON est.ID_MUNICIPIO = mun.ID_MUNICIPIOS INNER JOIN
                          dbo.ATIV_CATEGORIAS AS aticad ON est.ID_ESTABELECIMENTO = aticad.ID_ESTABELECIMENTO INNER JOIN
                          dbo.ATIVIDADES AS ativ ON aticad.ID_ATIVIDADE = ativ.ID_ATIVIDADE
     
    WHERE 
    est.cd_sif like'%ES%'

    • Sugerido como Resposta Edvaldo A sexta-feira, 10 de junho de 2016 19:54
    • Marcado como Resposta Thales F Quintas segunda-feira, 13 de junho de 2016 16:51
    sexta-feira, 10 de junho de 2016 19:41
  • Perfeito....Edvaldo...

    Vlw mesmo!!!

    Herbert Jone

    sexta-feira, 10 de junho de 2016 19:53
  • Edvaldo,

    encontrei um problema no resultado. A data 20091027165650 está retornando assim "50/10/2009".

    Herbert Jone

    sexta-feira, 10 de junho de 2016 19:57
  • Alterei um trecho, veja agora ...

    SELECT DISTINCT  
    est.CD_SIF, 
    mun.CD_MUNICIPIO, 
    mun.NM_MUNICIPIO, 
    ativ.DS_ATIVIDADE, 
    ativ.DS_CATEGORIA,
    est.CD_CNPJ,
    convert(varchar,SUBSTRING(aticad.DT_ALTERACAO,7,2) + '/' + SUBSTRING(aticad.DT_ALTERACAO,5, 2) +'/' + left(aticad.DT_ALTERACAO,4),102) as DT_ALTERACAO_2, 
    convert(varchar,SUBSTRING(aticad.DT_CONCESSAO,7,2) + '/' + SUBSTRING(aticad.DT_CONCESSAO,5, 2) +'/' + left(aticad.DT_CONCESSAO,4),102) as DT_CONCESSAO_2, 
    est.NM_RAZAO_SOCIAL,
    aticad.CD_INATIVO

    FROM         dbo.ESTABELECIMENTOS AS est INNER JOIN
                          dbo.MUNICIPIOS AS mun ON est.ID_MUNICIPIO = mun.ID_MUNICIPIOS INNER JOIN
                          dbo.ATIV_CATEGORIAS AS aticad ON est.ID_ESTABELECIMENTO = aticad.ID_ESTABELECIMENTO INNER JOIN
                          dbo.ATIVIDADES AS ativ ON aticad.ID_ATIVIDADE = ativ.ID_ATIVIDADE
     
    WHERE 
    est.cd_sif like'%ES%'

    sexta-feira, 10 de junho de 2016 20:03
  • O que significa o 7 depois do dt_alteração, só pra entender?

    Não querendo abusar o Campo CD_ INATIVO é um char que traz os resultados '0','1','2','S' e 'C'

    como faria para trazer 

    0>Ativo, 1>Pendente, 2>Inativo, S>Suspenso e C>Cancelado

    Herbert Jone


    sexta-feira, 10 de junho de 2016 20:12
  • Significa a partir do sétimo caracter, retornar apenas 2 caracters
    • Sugerido como Resposta Edvaldo A sábado, 11 de junho de 2016 12:41
    sexta-feira, 10 de junho de 2016 20:20
  • agora entendi...

    com pratica pegamos o jeito...mais uma vez obrigado!

    sexta-feira, 10 de junho de 2016 20:24
  • De olhada no artigo abaixo sobre o uso do CASE, vai ajuda-lo no sua outra dúvida.

    http://www.devmedia.com.br/trabalhando-com-expressoes-case-e-a-funcao-iif-no-t-sql/31292

    sábado, 11 de junho de 2016 12:41
  • Com base no link fiz o seguinte...

     

    SELECT 
    est.CD_SIF, 
    mun.CD_MUNICIPIO, 
    mun.NM_MUNICIPIO, 
    ativ.DS_ATIVIDADE, 
    ativ.DS_CATEGORIA,
    est.CD_CNPJ,
    convert(varchar,SUBSTRING(aticad.DT_ALTERACAO,7,2) + '/' + SUBSTRING(aticad.DT_ALTERACAO,5, 2) +'/' + left(aticad.DT_ALTERACAO,4),110) as DT_ALTERACAO_2, 
    convert(varchar,SUBSTRING(aticad.DT_CONCESSAO,7,2) + '/' + SUBSTRING(aticad.DT_CONCESSAO,5, 2) +'/' + left(aticad.DT_CONCESSAO,4),110) as DT_CONCESSAO_2, 
    est.NM_RAZAO_SOCIAL,
    tipo = case aticad.CD_INATIVO
             WHEN 0 THEN 'Ativo'
             WHEN 1 THEN 'Inativo'
             WHEN 2 THEN 'Pendente'
             WHEN 9 THEN 'Incompleto'
             WHEN 'C' THEN 'Cancelado'
             WHEN 'S' THEN 'Suspenso'
            end

    FROM         dbo.ESTABELECIMENTOS AS est INNER JOIN
                          dbo.MUNICIPIOS AS mun ON est.ID_MUNICIPIO = mun.ID_MUNICIPIOS INNER JOIN
                          dbo.ATIV_CATEGORIAS AS aticad ON est.ID_ESTABELECIMENTO = aticad.ID_ESTABELECIMENTO INNER JOIN
                          dbo.ATIVIDADES AS ativ ON aticad.ID_ATIVIDADE = ativ.ID_ATIVIDADE

    WHERE 
    est.cd_sif like'%ES%'

    Porém, estou recebendo essa mensagem:

    Msg 245, Level 16, State 1, Line 1
    Conversion failed when converting the varchar value 'S' to data type int.

    Poderia me ajudar a entender?!

    segunda-feira, 13 de junho de 2016 12:43
  • O campo CD_INATIVO provavelmente é varchar ou nvarchar,

    Coloque entre aspas ('') os números tbm

    tipo = case aticad.CD_INATIVO
             WHEN '0' THEN 'Ativo'
             WHEN '1' THEN 'Inativo'
             WHEN '2' THEN 'Pendente'
             WHEN '9' THEN 'Incompleto'
             WHEN 'C' THEN 'Cancelado'
             WHEN 'S' THEN 'Suspenso'
            end


    • Editado Edvaldo A segunda-feira, 13 de junho de 2016 16:43 .
    • Sugerido como Resposta Edvaldo A segunda-feira, 13 de junho de 2016 16:48
    • Marcado como Resposta Thales F Quintas segunda-feira, 13 de junho de 2016 16:52
    segunda-feira, 13 de junho de 2016 14:25
  • É sim. Perfeito...era isso mesmo, não me atentei a esse detalhe..

    Obrigado Edvaldo.

    segunda-feira, 13 de junho de 2016 16:47
  • Por nada, até a próxima !
    segunda-feira, 13 de junho de 2016 16:49