Usuário com melhor resposta
ignorar datas (em char) com formato errado

Pergunta
-
ola..
estou tentando fazer um SELECT que utiliza no WHERE uma data que fica armazenado num campo do tipo CHAR, existem registros em que esta data esta num formato errado e o SQLSERVER retorna erro quando tento utliza-las:
Server: Msg 242, Level 16, State 3, Line 1
The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.não posso excluir estes registros com as datas inconsistentes, como faço para ignora-los quando estou fazendo um select???
exemplo:
tenho a tabela 'TB_TESTE' com o campo 'DATA' que é do tipo CHAR(8)...
insert into tb_teste (data)
values('06/06/06') -- data corretainsert into tb_teste (data)
values('99/12/06') -- data incorreta (retorna out-of-range date time) , não deve retornar no selectfazer um select que retorne os registros com data superior a '20060101'...
tentei assim:
select convert(char, CONVERT(datetime, data), 112) AS wdata
from TB_TESTE where isdate(data)= 1 and convert(char, CONVERT(datetime, data), 112) >= '20060606'retorna o erro: Server: Msg 242, Level 16, State 3, Line 1
The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.tentei tambem fazer uma gambiarra com select de select... mas ocorreu o mesmo erro...
select * from (
select convert(char, CONVERT(datetime, data), 112) AS wdata
from tb_teste where isdate(data)= 1
) SE
where wdata >= '20060606'alguem tem alguma ideia de que posso fazer?
Respostas
-
veja se assim ajuda
drop table #exemplo
create table #exemplo (campo char(10))insert into #exemplo (campo) Values ('20060606')
insert into #exemplo (campo) Values ('20060706')
insert into #exemplo (campo) Values ('20060806')
insert into #exemplo (campo) Values ('20063306') -- para dar erro
insert into #exemplo (campo) Values ('') -- para dar erro
Select convert(datetime,campo,113) campo
From #exemplo where case when isdate(campo) = 1 then campo else '19000101' End = '20060606'
Abs;
Todas as Respostas
-
-
select convert(char, CONVERT(datetime, data), 112) AS wdata
from TB_TESTE where isdate(data)= 1 and convert(char, CONVERT(datetime, data), 112) >= '20060606'mas mesmo assim ocorre erro, mesmo que a primeira condição seja FALSA (0) o sqlserver tenta verificar a segunda condição (acabei de esquecer o nome disto... rsrsrs), e ocorre o erro...
-
-
-
veja se assim ajuda
drop table #exemplo
create table #exemplo (campo char(10))insert into #exemplo (campo) Values ('20060606')
insert into #exemplo (campo) Values ('20060706')
insert into #exemplo (campo) Values ('20060806')
insert into #exemplo (campo) Values ('20063306') -- para dar erro
insert into #exemplo (campo) Values ('') -- para dar erro
Select convert(datetime,campo,113) campo
From #exemplo where case when isdate(campo) = 1 then campo else '19000101' End = '20060606'
Abs;
-
-
Estou com o mesmo problema, mas apenas ao efetuar o comando insert e update em campo smalldatetime.
Acredito que seja o formato de data do SQL, pois notei que a data está no formato mm/dd/yyyy. Porém não descobri como fazer esta alteração no SQL 2005.
-