none
Comando ISDATE RRS feed

  • Pergunta

  • Boa tarde,

    Tenho uma tabela que se chama teste, nela tenho varias colunas, entre elas uma chamada NASC que ainda está com NVARCHAR quero coloca-la como date mas estou com problemas em transformar pois o sql diz que não é possível transformar em date, quero procurar algum campo que não corresponda a uma data, vi em alguns fóruns sobre o ISDATE mas não consegui utilizar ele nesta coluna, como posso usa-lo?

    sexta-feira, 14 de agosto de 2015 18:02

Respostas

  • Olá, Leison!

       Veja se o exemplo abaixo te ajuda, ao menos para localizar os registros que estão com o valor em um formato inválido para a conversão para date.

    declare @teste table
    (
    	Id		int identity(1,1)
    	, Data	varchar(10)
    )
    
    insert into @teste (Data) values
    ('02/05/2015')
    , ('03/05/2015')
    , ('07/05/2015')
    , ('2015/08/25')
    , ('03/05/2015')
    , ('2015/23/08')
    , ('03/05/2015')
    
    select ID, Data from @teste where ISDATE(Data) = 0
    Bom trabalho!

    sexta-feira, 14 de agosto de 2015 19:36
  • Leison,

    Você já possui dados nesta coluna? Se sim, realmente não vai conseguir facilmente realizar a conversão.

    O que você poderia fazer é criar:

    • Uma nova coluna nesta mesma tabela com o tipo de dado Date,
    • Copiar os dados que estão armazenadas na coluna errada utilizando a função Convert() para a coluna data,
    • Depois excluir a coluna errada.

    Vale ressaltar que dependendo do dado que esta armazenado na tabela você poderá ter problemas de conversão, caso o mesmo não seja reconhecido como uma data válida.

    O IsDate() é uma função existente no SQL Server que possui a finalidade de validar se o valor informado em uma coluna, variável ou parâmetro pode ser considerada uma data válida.


    Pedro Antonio Galvao Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sexta-feira, 14 de agosto de 2015 19:14

Todas as Respostas

  • Leison,

    Você já possui dados nesta coluna? Se sim, realmente não vai conseguir facilmente realizar a conversão.

    O que você poderia fazer é criar:

    • Uma nova coluna nesta mesma tabela com o tipo de dado Date,
    • Copiar os dados que estão armazenadas na coluna errada utilizando a função Convert() para a coluna data,
    • Depois excluir a coluna errada.

    Vale ressaltar que dependendo do dado que esta armazenado na tabela você poderá ter problemas de conversão, caso o mesmo não seja reconhecido como uma data válida.

    O IsDate() é uma função existente no SQL Server que possui a finalidade de validar se o valor informado em uma coluna, variável ou parâmetro pode ser considerada uma data válida.


    Pedro Antonio Galvao Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sexta-feira, 14 de agosto de 2015 19:14
  • Olá, Leison!

       Veja se o exemplo abaixo te ajuda, ao menos para localizar os registros que estão com o valor em um formato inválido para a conversão para date.

    declare @teste table
    (
    	Id		int identity(1,1)
    	, Data	varchar(10)
    )
    
    insert into @teste (Data) values
    ('02/05/2015')
    , ('03/05/2015')
    , ('07/05/2015')
    , ('2015/08/25')
    , ('03/05/2015')
    , ('2015/23/08')
    , ('03/05/2015')
    
    select ID, Data from @teste where ISDATE(Data) = 0
    Bom trabalho!

    sexta-feira, 14 de agosto de 2015 19:36
  • Obrigado pela ajuda de vocês,

    Consegui resolver o problema. Consegui identificar alguns erros nas datas, sendo eles os seguintes:

    Data do mês de fevereiro maior que 28,

    Data do mês de Abril maior que 30,

    Data do mês de junho maior que 30,

    Data do mês de setembro maior que 30,

    Data do mês de novembro maior que 30.

    Como os dados da tabela era preenchido manualmente, a tabela ficava passiva de erro.

    segunda-feira, 17 de agosto de 2015 18:56