Problema na conversão de data

421 views
Skip to first unread message

Daniela Eler

unread,
Jan 20, 2011, 6:46:05 AM1/20/11
to SQLServerDF
Pessoal, estou com um problema na conversão de varchar para datetime.
O servidor onde estou fazendo a consulta é SQL 2008R2 antes era SQL
2008 e funcionava normal a conversão, quando mudou o servidor para R2
parou de funcionar a consulta. Tentei várias maneiras de fazer a
conversão, mas todas dão essa mensagem, "Conversion failed when
converting date and/or time from character string.", o campo que estou
tentando converter para data tem esse valor 14/12/2010 e é do tipo
varchar e quero transformar para datetime

Raionan Andrade

unread,
Jan 20, 2011, 7:15:58 AM1/20/11
to sqlse...@googlegroups.com
select convert(datetime,'14/12/2010',103)
assim?

Daniela Medeiros Eler

unread,
Jan 20, 2011, 8:46:12 AM1/20/11
to sqlse...@googlegroups.com
exatamente, seria dessa maneira. Se eu colocar dessa maneira, substituindo o campo pelo varchar '14/12/2010', ele funciona corretamente, mas se eu coloco o campo da tabela ele dá o erro.
Uma maneira que conseguir fazer foi desse modo 'case when campo is not null then CONVERT(DATETIME,campo,103) else getdate() end as data'
se eu substituir null pelo getdate() ele tbm dá erro.

Essa é a configuração do campo
Column_name:campo    
Type:varchar      
Computed:no   
Length:255                     
Nullable:yes     
TrimTrailingBlanks:no      
FixedLenNullInSource :yes      
Collation:Latin1_General_CI_AS

Samuel

unread,
Jan 20, 2011, 12:02:50 PM1/20/11
to SQLServerDF
coloca antes da instrução "SET DATEFORMAT DMY"

[]'s
Samuel

On Jan 20, 11:46 am, Daniela Medeiros Eler <danielae...@gmail.com>
wrote:
> exatamente, seria dessa maneira. Se eu colocar dessa maneira, substituindo o
> campo pelo varchar '14/12/2010', ele funciona corretamente, mas se eu coloco
> o campo da tabela ele dá o erro.
> Uma maneira que conseguir fazer foi desse modo 'case when campo is not null
> then CONVERT(DATETIME,campo,103) else getdate() end as data'
> se eu substituir null pelo getdate() ele tbm dá erro.
>
> Essa é a configuração do campo
> Column_name:campo
> Type:varchar
> Computed:no
> Length:255
> Nullable:yes
> TrimTrailingBlanks:no
> FixedLenNullInSource :yes
> Collation:Latin1_General_CI_AS
>
> Em 20 de janeiro de 2011 10:15, Raionan Andrade <raio...@gmail.com>escreveu:
>
>
>
>
>
>
>
> > select convert(datetime,'14/12/2010',103)
> > assim?
>

Daniela Medeiros Eler

unread,
Jan 20, 2011, 12:54:24 PM1/20/11
to sqlse...@googlegroups.com
esse comando irá alterar todo o formato do banco ou apenas nas próximas instruções?

Luan.Moreno - SQL Server DF

unread,
Jan 20, 2011, 1:02:40 PM1/20/11
to sqlse...@googlegroups.com

Daniela,

 

Esse comando afetará somente na sua sessão!

 

 

[]s

 

Luan Moreno M. Maciel

http://luanmorenodba.wordpress.com/ - (61) 8139-8966

MCP || MCTS SQL Server 2005

Daniela Medeiros Eler

unread,
Jan 20, 2011, 1:42:54 PM1/20/11
to sqlse...@googlegroups.com
tentei e continua com o mesmo erro

Gustavo Maia

unread,
Jan 20, 2011, 9:02:47 PM1/20/11
to sqlse...@googlegroups.com
Boa Noite,
 
Possivelmente há algum valor na coluna que não pode ser convertido. Recomendo tentar o ISDATE com o CONVERT para verificar qual registro está gerando problemas.
 
SELECT Coluna FROM Tabela WHERE ISDATE(CONVERT(<Campo>)) = 0
 
[ ]s,
 
Gustavo

2011/1/20 Daniela Medeiros Eler <danie...@gmail.com>

Daniela Medeiros Eler

unread,
Jan 21, 2011, 4:56:46 AM1/21/11
to sqlse...@googlegroups.com
fiz a consulta e continua com erro.
'Conversion failed when converting date and/or time from character string.'
o estranho é que quando coloco top 10 ele nao dá erro e não retorna nenhum registro, mas quando tiro o top 10 ele dá o erro.

Marcos Felisberto

unread,
Jan 21, 2011, 5:52:25 AM1/21/11
to sqlse...@googlegroups.com, sqlse...@googlegroups.com
Isso está me cheirando a caracteres "estranhos" na string.

Você já tentou usar o comando abaixo e funcionou?
Select convert(datetime, '14/12/2010', 103)

Se sim, existe um problema nos seus dados, e o mais simples é a existência de espaço em algum dado que você resolve com rtrim(ltrim(campo)).

Mesmo que funcione, você vai precisar achar o registro que está errado para evitar processamento desnecessário na sua consulta.

Boa sorte.

------------------------
Marcos Felisberto

Daniela Medeiros Eler

unread,
Jan 21, 2011, 6:50:18 AM1/21/11
to sqlse...@googlegroups.com
Alisson tentei utilizar o convert que você falou e não deu certo.
Marco está dando erro esse camando. Para resolver o problema estou utilizando no where a condição 'and len(campo)=10'. Tentei retornar os campos com tamanho maior que 10 e não retornou nada, o que estou suspeitando é que o sql server está executando a conversão do select antes de filtrar as linhas da tabela, algo desse tipo.

Obrigada pela ajuda de todos

Marcos Felisberto

unread,
Jan 21, 2011, 7:05:44 AM1/21/11
to sqlse...@googlegroups.com
Daniela

Lembre-se que o caminho que te passei é pra IDENTIFICAR o problema e corrigir o dado que está causando o problema.

Um conselho de quem já de lascou muito como DBA: arruma antes que de merda. É mais rápido agora, depois vai dar muito mais trabalho, sempre!

Boa sorte

------------------------
Marcos Felisberto

Daniela Medeiros Eler

unread,
Jan 21, 2011, 11:07:22 AM1/21/11
to sqlse...@googlegroups.com
sim com certeza. muito obrigada pelas dicas

Luan.Moreno - SQL Server DF

unread,
Jan 21, 2011, 12:12:17 PM1/21/11
to sqlse...@googlegroups.com

Concordo plenamente com o Marcos, O mais rápido pode ser o mais doloroso depois!

Gustavo Maia

unread,
Jan 22, 2011, 10:23:56 AM1/22/11
to sqlse...@googlegroups.com
Boa Tarde,
 
Você pode gerar as DMLs de INSERT para que a gente reproduza o problema ?
 
[ ]s,
 
Gustavo
2011/1/21 Daniela Medeiros Eler <danie...@gmail.com>
Reply all
Reply to author
Forward
0 new messages