Pesquisa Sql para inserir datetime no servidor SQL
quero inserir um valor datetime
numa tabela (servidor SQL) usando a pesquisa SQL abaixo
insert into table1(approvaldate)values(18-06-12 10:34:09 AM);
Mas eu percebo este erro msg. Incorrect syntax near '10'.
Tentei com as citações.
insert into table1(approvaldate)values('18-06-12 10:34:09 AM');
recebi esta mensagem de erroCannot convert varchar to datetime
7 answers
Você vai querer usar a AAAAMMDD para determinação de data inequívoca no servidor SQL.
insert into table1(approvaldate)values('20120618 10:34:09 AM');
Se for casado com o formato dd-mm-yy hh:mm:ss xm
, terá de usar o CONVERT com o estilo específico.
insert table1 (approvaldate)
values (convert(datetime,'18-06-12 10:34:09 PM',5));
5
aqui está o estilo para as datas italianas. Bem, não só italianos, mas essa é a cultura que é atribuída em livros Online.
Ver a secção String Literal Date and Time Formats na Microsoft TechNet.
Podias usar o formato padrão de data SQL da ANSI. De acordo com o link acima, ele é rotulado como "multi-linguagem":
insert into table1(approvaldate) values ('2012-06-18 10:34:09')
No entanto, isto não funcionará em todas as línguas. Por exemplo, aqui está um script rápido que usa SQL dinâmico para testar um formato de data em todas as linguagens SQL definidas em .línguas syslanguages:
declare @sql nvarchar(4000)
declare @LangID smallint
declare @Alias sysname
declare @MaxLangID smallint
select @MaxLangID = max(langid) from sys.syslanguages
set @LangID = 0
while @LangID <= @MaxLangID
begin
select @Alias = alias
from sys.syslanguages
where langid = @LangID
if @Alias is not null
begin
begin try
set @sql = N'declare @TestLang table (langdate datetime)
set language ''' + @alias + N''';
insert into @TestLang (langdate)
values (''2012-06-18 10:34:09'')'
print 'Testing ' + @Alias
exec sp_executesql @sql
end try
begin catch
print 'Error in language ' + @Alias
print ERROR_MESSAGE()
end catch
end
select @LangID = min(langid)
from sys.syslanguages
where langid > @LangID
end
Se você executar este script, você vai Muitos
O Estúdio de gestão cria programas como:
insert table1 (foodate) values(CAST(N'2012-06-18 10:34:09.000' AS DateTime))
Tens de o Adicionar como
insert into table1(date1) values('12-mar-2013');
Não é necessário utilizar o convert. Basta listá-lo como uma data citada no formato ISO 8601.
Assim:
select * from table1 where somedate between '2000/01/01' and '2099/12/31'
O separador tem de ser um {[[1]} e tem de estar rodeado por aspas únicas '
.
Se estiver a armazenar valores através de qualquer linguagem de programação
Aqui está um exemplo em C#Para guardar a data, tem de a converter primeiro e depois armazená-la
insert table1 (foodate)
values (FooDate.ToString("MM/dd/yyyy"));
O FooDate é uma variável datetime que contém a sua data no seu formato.
Encontro - me num problema mais genérico: conseguir diferentes (e não necessariamente conhecidos) formatos de datetime e inseri-los na coluna de datetime. Resolvi-o usando esta afirmação, que finalmente se tornou uma função escalar (relevante para ODBC canonical, americano, ANSI e britânico\franch date style-pode ser expandida):
insert into <tableName>(<dateTime column>) values(coalesce
(TRY_CONVERT(datetime, <DateString, 121), TRY_CONVERT(datetime, <DateString>,
101), TRY_CONVERT(datetime, <DateString>, 102), TRY_CONVERT(datetime,
<DateString>, 103)))