none
converter para data RRS feed

  • Pergunta

  • boas

    tenho uma coluna com datas em nvarchar(max)

    a data esta neste formato:

    30-11-2011

    dia-mes-ano

    Preciso de copia-la para a coluna teste mas em formato data. Para depois conseguir fazer uma pesquisa com datas, achar a mais pequena e maior...

    Mas preciso que se mantenha no mesmo formato. PAra não dar confusões.

    Penso que o formato deverá ser o datetime(7) né?

    obrigado


    Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com

    quinta-feira, 5 de abril de 2012 09:02

Respostas

  • Deleted
    quinta-feira, 5 de abril de 2012 11:53
  • Bom dia Flashed,

    Eu faria da seguinte forma:

    update tabela set data = convert(datetime,F6,103)

    Segue abaixo um script de teste:

    create table #y
    (
    a nvarchar(max),
    b datetime
    )
    
    insert into #y values ('30-11-2011',null)
    update #y set b = convert(datetime,a,103) 

    Qualquer dúvida posta ae.

    Abraços

    • Marcado como Resposta Jonas São Paulo terça-feira, 10 de abril de 2012 10:57
    quinta-feira, 5 de abril de 2012 15:34
  • Flashed,

    Este campo data esta utilizando qual DataType?

    Você já tentou em conjunto com a função Convert, utilizar a parâmetro, 103 para formatação de data?

    Veja este exemplo:

    DECLARE @dt    NVARCHAR(10)
    SET    @dt = '30-11-2011'
    DECLARE @dtConv    DATETIME
    SET    @dtConv    =    SUBSTRING(@dt,7,4) + SUBSTRING(@dt,4,2) + SUBSTRING(@dt,1,2)
    Select Convert(Varchar(10),@dtConv,103) 'Valor DATETIME'


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Marcado como Resposta Jonas São Paulo terça-feira, 10 de abril de 2012 10:57
    quinta-feira, 5 de abril de 2012 17:11
  • Flashed, segue alguns exemplos, veja se te ajuda.

    -- declarando uma tabela temporária
    declare @t as table (ColunaTexto varchar(max), ColunaData date)
    
    -- populando com algumas datas no formato de texto, conforme exemplo da pergunta.
    insert into @t (ColunaTexto) values ('30-11-2011'),('10-01-2000'),('01-04-2012'),('21-09-1998')
    
    -- comun
    select * from @t
    
    -- trazendo a maior e menor data
    select MIN(convert(date,ColunaTexto,105)) as MenorDt,
           MAX(convert(date,ColunaTexto,105)) as MaiorDt
    from @t
    
    -- atualizando a coluna data no formato de data
    update @t set  ColunaData = convert(date,ColunaTexto,105)
    
    -- select final 
    select * from @t


    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino

    • Marcado como Resposta Jonas São Paulo terça-feira, 10 de abril de 2012 10:57
    quinta-feira, 5 de abril de 2012 20:25
  • Deleted
    • Marcado como Resposta Jonas São Paulo terça-feira, 10 de abril de 2012 10:57
    sábado, 7 de abril de 2012 14:02

Todas as Respostas

  • Deleted
    quinta-feira, 5 de abril de 2012 11:53
  • estou a tnetar fazer algo deste genero..mas não dá

    update tabela set data = REPLACE(CONVERT(CHAR(10),F6,103),'/','-')

    onde F6 é o campo que tem a data em nvarchar(max)

    obrigado


    Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com

    quinta-feira, 5 de abril de 2012 13:44
  • Bom dia Flashed,

    Eu faria da seguinte forma:

    update tabela set data = convert(datetime,F6,103)

    Segue abaixo um script de teste:

    create table #y
    (
    a nvarchar(max),
    b datetime
    )
    
    insert into #y values ('30-11-2011',null)
    update #y set b = convert(datetime,a,103) 

    Qualquer dúvida posta ae.

    Abraços

    • Marcado como Resposta Jonas São Paulo terça-feira, 10 de abril de 2012 10:57
    quinta-feira, 5 de abril de 2012 15:34
  • Flashed,

    Este campo data esta utilizando qual DataType?

    Você já tentou em conjunto com a função Convert, utilizar a parâmetro, 103 para formatação de data?

    Veja este exemplo:

    DECLARE @dt    NVARCHAR(10)
    SET    @dt = '30-11-2011'
    DECLARE @dtConv    DATETIME
    SET    @dtConv    =    SUBSTRING(@dt,7,4) + SUBSTRING(@dt,4,2) + SUBSTRING(@dt,1,2)
    Select Convert(Varchar(10),@dtConv,103) 'Valor DATETIME'


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Marcado como Resposta Jonas São Paulo terça-feira, 10 de abril de 2012 10:57
    quinta-feira, 5 de abril de 2012 17:11
  • Flashed, segue alguns exemplos, veja se te ajuda.

    -- declarando uma tabela temporária
    declare @t as table (ColunaTexto varchar(max), ColunaData date)
    
    -- populando com algumas datas no formato de texto, conforme exemplo da pergunta.
    insert into @t (ColunaTexto) values ('30-11-2011'),('10-01-2000'),('01-04-2012'),('21-09-1998')
    
    -- comun
    select * from @t
    
    -- trazendo a maior e menor data
    select MIN(convert(date,ColunaTexto,105)) as MenorDt,
           MAX(convert(date,ColunaTexto,105)) as MaiorDt
    from @t
    
    -- atualizando a coluna data no formato de data
    update @t set  ColunaData = convert(date,ColunaTexto,105)
    
    -- select final 
    select * from @t


    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino

    • Marcado como Resposta Jonas São Paulo terça-feira, 10 de abril de 2012 10:57
    quinta-feira, 5 de abril de 2012 20:25
  • Deleted
    • Marcado como Resposta Jonas São Paulo terça-feira, 10 de abril de 2012 10:57
    sábado, 7 de abril de 2012 14:02
  • Boas

    Estive a estudar e revi o tópico desde e inicio é ja entendi tudo direitinho :)

    Esta a funcionar 

    obrigado a todos pela ajuda


    Visual Basic 2008 Express Edition SQL Server Management Studio flashedr8@gmail.com

    terça-feira, 10 de abril de 2012 10:58