Usuário com melhor resposta
Problema com campo DATE

Pergunta
-
Estou fazendo um cursor para percorrer uma tabela A, capturar algumas informações e inseri-las em uma tabela B.
Os campos estão no formato DATE e instrução é essa:
insert into Vigencia (DataInicio, DataFinal, IdPlataforma, IdMarca, IdProduto)
values ('01/04/2011', '30/09/11', @idPlataforma, @idMarca, @idProduto)dou f5 e o sql retorna este erro:
Msg 241, Level 16, State 1, Line 13
Conversion failed when converting date and/or time from character string.Já tentei tirar as aspas, colocar aspas duplas, colocar aspas simpels e duplas e nada resolve.
Qual é o formato correto pra inserir uma data em um campo setado como DATE no sql server?
Obrigado.
Respostas
-
João, boa tarde.
Vc pode informar ao SQL o formato de data que vc está trabalhar através do comando SET DATEFORMAT
Coloque da seguinte forma: set dateformart dmy
Desta forma o SQL irá interpretar toda a manipulação de data como dia/mês/Ano.
Mudando agora de assunto: pq vc está utilizando cursores? Pergunto pois cursores não são perfomáticos. Em um volume considerável de dados a sua rotina poderia se tornar inviável em relação a perfomance. Tente inserir os dados da tabela A diretamente na tabela B, utilizando um critério que satisfaça a condição desejada.
Abs.
Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp
- Marcado como Resposta Heloisa Pires sexta-feira, 23 de março de 2012 16:53
-
João
Eu sempre defino o formato de data na aplicação como AAAA-MM-DD
- Marcado como Resposta Heloisa Pires sexta-feira, 23 de março de 2012 16:53
-
Boa Noite,
Eu não recomendo nem o formato americano e nem o SET DATEFORMAT. O formato americano pode dar problemas se o Default Language do usuário for alterado e aí sua aplicação ficará dependente dessa configuração. O SET DATEFORMAT pode provocar recompilações se colocado dentro de uma SP (quando não outros problemas).
O ideal é utilizar o formato chinês YYYYMMDD sem hífens e você nunca terá problemas.
[ ]s,
Gustavo Maia Aguiar
Blog: http://gustavomaiaaguiar.wordpress.com
Vídeos:http://www.youtube.com/user/gmasqlClassifique as respostas. O seu feedback é imprescindível
- Sugerido como Resposta Gustavo Maia Aguiar terça-feira, 13 de março de 2012 22:15
- Marcado como Resposta Heloisa Pires sexta-feira, 23 de março de 2012 16:53
-
Olá João Goya,
Tente executar o comando da seguinte forma:
insert into Vigencia (DataInicio, DataFinal, IdPlataforma, IdMarca, IdProduto) values ('20110401', '20110930', @idPlataforma, @idMarca, @idProduto)
Heloisa Pires | LATAM Forum Support Engineer | Microsoft Corporation
- Marcado como Resposta Heloisa Pires sexta-feira, 23 de março de 2012 16:53
Todas as Respostas
-
-
João, boa tarde.
Vc pode informar ao SQL o formato de data que vc está trabalhar através do comando SET DATEFORMAT
Coloque da seguinte forma: set dateformart dmy
Desta forma o SQL irá interpretar toda a manipulação de data como dia/mês/Ano.
Mudando agora de assunto: pq vc está utilizando cursores? Pergunto pois cursores não são perfomáticos. Em um volume considerável de dados a sua rotina poderia se tornar inviável em relação a perfomance. Tente inserir os dados da tabela A diretamente na tabela B, utilizando um critério que satisfaça a condição desejada.
Abs.
Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp
- Marcado como Resposta Heloisa Pires sexta-feira, 23 de março de 2012 16:53
-
João
Eu sempre defino o formato de data na aplicação como AAAA-MM-DD
- Marcado como Resposta Heloisa Pires sexta-feira, 23 de março de 2012 16:53
-
Boa Noite,
Eu não recomendo nem o formato americano e nem o SET DATEFORMAT. O formato americano pode dar problemas se o Default Language do usuário for alterado e aí sua aplicação ficará dependente dessa configuração. O SET DATEFORMAT pode provocar recompilações se colocado dentro de uma SP (quando não outros problemas).
O ideal é utilizar o formato chinês YYYYMMDD sem hífens e você nunca terá problemas.
[ ]s,
Gustavo Maia Aguiar
Blog: http://gustavomaiaaguiar.wordpress.com
Vídeos:http://www.youtube.com/user/gmasqlClassifique as respostas. O seu feedback é imprescindível
- Sugerido como Resposta Gustavo Maia Aguiar terça-feira, 13 de março de 2012 22:15
- Marcado como Resposta Heloisa Pires sexta-feira, 23 de março de 2012 16:53
-
Gustavo
O padrão YYYY-MM-DD é internacional definido pela ISO 8601. Não posso afirma que o padrão YYYYMMDD que voce informou poderá apresentar problemas mas eu posso afirmar que o padrão YYYY-MM-DD não irá.
Para maiores esclarecimentos
-
Olá João Goya,
Tente executar o comando da seguinte forma:
insert into Vigencia (DataInicio, DataFinal, IdPlataforma, IdMarca, IdProduto) values ('20110401', '20110930', @idPlataforma, @idMarca, @idProduto)
Heloisa Pires | LATAM Forum Support Engineer | Microsoft Corporation
- Marcado como Resposta Heloisa Pires sexta-feira, 23 de março de 2012 16:53
-
Boa Tarde,
Eu conheço essas especificação. Entretanto, não há problemas em usar com ou sem hífens. Abaixo disponibilizo um script
-- Muda o formato de data no formato YMD (Ano-Dia-Mes)
SET DATEFORMAT DMY-- Declara duas variáveis do tipo DATE
DECLARE @D1 DATE, @D2 DATE, @D3 DATE
SELECT @D1 = '2012-03-21', @D2 = '20120321'-- Extrai o mês
SELECT
DAY(@D1), MONTH(@D1), YEAR(@D1),
DAY(@D2), MONTH(@D2), YEAR(@D2)Qualquer combinação de SET DATEFORMAT dará os mesmos e corretos resultados. Não encontrei um problema em utilizar os não o hífen, mas normalmente eu não utilizo hífens e até onde vejo, os melhores especialistas em T-SQL também não (vide Itzik Ben Gan).
Ainda assim, entendo que é uma questão de escolha. Você já encontrou problemas com o YYYYMMDD (sem hífens) ?
[ ]s,
Gustavo Maia Aguiar
Blog: http://gustavomaiaaguiar.wordpress.com
Vídeos:http://www.youtube.com/user/gmasql
Classifique as respostas. O seu feedback é imprescindível
- Editado Gustavo Maia Aguiar quarta-feira, 21 de março de 2012 18:06