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

Por favor, ajudem-me! Obrigado.

Author: Muntasir, 2012-10-18

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.

 159
Author: RichardTheKiwi, 2012-10-18 15:15:20

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

 23
Author: Paul Williams, 2013-12-16 17:45:07

O Estúdio de gestão cria programas como:

insert table1 (foodate) values(CAST(N'2012-06-18 10:34:09.000' AS DateTime))
 12
Author: Eduardo Aguiar, 2015-06-10 17:01:22

Tens de o Adicionar como

insert into table1(date1) values('12-mar-2013');
 6
Author: nid, 2013-10-24 06:30:55

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 '.

 2
Author: Johan, 2016-02-28 17:45:52

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.

 1
Author: Pankaj, 2013-09-28 09:02:13

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))) 
 1
Author: Guy E, 2017-11-12 15:43:32