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);