164 votes

Requête Sql pour insérer une date dans SQL Server

Je veux insérer un datetime dans une table (SQL Server) en utilisant la requête sql ci-dessous

insert into table1(approvaldate)values(18-06-12 10:34:09 AM);

Mais je reçois ce message d'erreur. Incorrect syntax near '10'.

J'ai essayé avec les guillemets

insert into table1(approvaldate)values('18-06-12 10:34:09 AM');

Je reçois ce message d'erreur Cannot convert varchar to datetime

Aidez-nous ! Merci.

279voto

RichardTheKiwi Points 58121

Il est préférable d'utiliser le format AAAAMMJJ pour déterminer la date sans ambiguïté dans le serveur SQL.

insert into table1(approvaldate)values('20120618 10:34:09 AM');

Si vous êtes marié au dd-mm-yy hh:mm:ss xm vous devrez utiliser CONVERT avec le style spécifique.

insert into table1 (approvaldate)
       values (convert(datetime,'18-06-12 10:34:09 PM',5));

5 voici le style pour les dattes italiennes. Eh bien, pas seulement les Italiens, mais c'est la culture à laquelle on l'attribue en Livres en ligne .

34voto

Paul Williams Points 7390

Un choix plus indépendant de la langue pour les chaînes de caractères est la norme internationale ISO 8601 format "YYYY-MM-DDThh:mm:ss". J'ai utilisé la requête SQL ci-dessous pour tester le format, et il fonctionne effectivement dans tous les langages SQL en sys.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-18T10: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

Selon le Formats de date et d'heure littéraux en chaîne section dans Microsoft TechNet, le format de date standard ANSI Standard SQL "YYYY-MM-DD hh:mm:ss" est censé être "multi-langue". Cependant, en utilisant la même requête, le format ANSI ne fonctionne pas dans tous les langages SQL.

Par exemple, en danois, vous rencontrerez de nombreuses erreurs comme celles-ci :

Erreur dans le langage danois La conversion d'un type de données varchar en un type de données datetime a donné lieu à une valeur hors plage.

Si vous voulez construire une requête en C# pour l'exécuter sur le serveur SQL, et que vous devez transmettre une date au format ISO 8601, utilisez la fonction Spécification du format "s" triable :

string.Format("select convert(datetime2, '{0:s}'", DateTime.Now);

24voto

Eduardo Aguiar Points 247

Management studio crée des scripts comme :

insert table1 (foodate) values(CAST(N'2012-06-18 10:34:09.000' AS DateTime))

13voto

nid Points 131

Vous devez l'ajouter comme

insert into table1(date1) values('12-mar-2013');

3voto

Johan Points 34755

Il n'est pas nécessaire d'utiliser la fonction de conversion. Il suffit de l'inscrire comme une date cotée au format ISO 8601.
Comme ça :

select * from table1 where somedate between '2000/01/01' and '2099/12/31'

Le séparateur doit être un / et il doit être entouré de simples ' citations.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X