Je veux insérer une valeur datetime
dans une table (SQL Server) à l'aide de la requête SQL ci-dessous
insert into table1(approvaldate)values(18-06-12 10:34:09 AM);
Mais je reçois cette erreur msg. Incorrect syntax near '10'.
J'ai essayé avec les citations
insert into table1(approvaldate)values('18-06-12 10:34:09 AM');
Je reçois ce message d'erreur Cannot convert varchar to datetime
Aide gentillement! Merci.
Vous souhaiterez utiliser AAAAMMJJ pour la détermination de date sans ambiguïté dans SQL Server.
_insert into table1(approvaldate)values('20120618 10:34:09 AM');
_
Si vous êtes marié au format _dd-mm-yy hh:mm:ss xm
_, vous devrez utiliser CONVERT avec le style spécifique.
_insert table1 (approvaldate)
values (convert(datetime,'18-06-12 10:34:09 PM',5));
_
5
voici le style pour les dates italiennes. Eh bien, pas seulement les Italiens, mais c'est la culture qui lui est attribuée dans Books Online .
Un choix plus indépendant de la langue pour les littéraux de chaîne est la norme internationale ISO 8601 format "AAAA-MM-JJThh: mm: ss". J'ai utilisé la requête SQL ci-dessous pour tester le format, et cela fonctionne bien dans tous les langages SQL de 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 la section Formats de date et d'heure littéraux de chaîne de Microsoft TechNet, le format de date ANSI standard SQL standard "AAAA-MM-JJ hh: mm: ss" est supposé être "multilingue". 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 telles que:
Erreur de langue Danois La conversion d'un type de données varchar en un type de données datetime a entraîné une valeur hors limites.
Si vous souhaitez créer une requête en C # à exécuter sur SQL Server et que vous devez transmettre une date au format ISO 8601, utilisez le spécificateur de format Sortable "s" :
string.Format("select convert(datetime2, '{0:s}'", DateTime.Now);
Le studio de gestion crée des scripts tels que:
insert table1 (foodate) values(CAST(N'2012-06-18 10:34:09.000' AS DateTime))
vous devez l'ajouter comme
insert into table1(date1) values('12-mar-2013');
Pas besoin d'utiliser convert. Il suffit de l'indiquer comme date citée au format ISO 8601.
Ainsi:
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 guillemets simples '
.
Si vous stockez des valeurs via n'importe quel langage de programmation
Voici un exemple en C #
Pour stocker la date, vous devez d'abord la convertir, puis la stocker.
insert table1 (foodate)
values (FooDate.ToString("MM/dd/yyyy"));
FooDate est une variable datetime contenant votre date dans votre format.
Je rencontre un problème plus générique: obtenir différents formats (et pas nécessairement connus) datetime et les insérer dans une colonne datetime. Je l'ai résolu en utilisant cette déclaration, qui est finalement devenue une fonction scalaire (pertinente pour ODBC, style canonique, américain, ANSI et britannique\franch date - peut être étendue):
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)))