Posteriormente a investigar con expertos en esta materia, programadores de varias áreas y maestros dimos con la solución a la cuestión y la plasmamos en esta publicación.
Solución:
Querrá usar AAAAMMDD para determinar la fecha sin ambigüedades en SQL Server.
insert into table1(approvaldate)values('20120618 10:34:09 AM');
Si está casado con el dd-mm-yy hh:mm:ss xm
formato, necesitará usar CONVERT con el estilo específico.
insert into table1 (approvaldate)
values (convert(datetime,'18-06-12 10:34:09 PM',5));
5
aquí está el estilo para las fechas italianas. Bueno, no solo los italianos, sino que esa es la cultura a la que se atribuye en Books Online.
Una opción más independiente del idioma para string literales es el formato estándar internacional ISO 8601 “YYYY-MM-DDThh:mm:ss”. Utilicé la consulta SQL a continuación para probar el formato y, de hecho, funciona en todos los lenguajes 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
De acuerdo con la sección Formatos de fecha y hora literales de cadena en Microsoft TechNet, se supone que el formato de fecha SQL estándar ANSI estándar “AAAA-MM-DD hh: mm: ss” es “multilingüe”. Sin embargo, al usar la misma consulta, el formato ANSI no funciona en todos los lenguajes SQL.
Por ejemplo, en danés, verá muchos errores como los siguientes:
Error en idioma danés La conversión de un tipo de datos varchar a un tipo de datos de fecha y hora resultó en un valor fuera de rango.
Si desea crear una consulta en C# para ejecutarla en SQL Server y necesita pasar una fecha en el formato ISO 8601, use el especificador de formato Sortable “s”:
string.Format("select convert(datetime2, '0:s'", DateTime.Now);
Management studio crea guiones como:
insert table1 (foodate) values(CAST(N'2012-06-18 10:34:09.000' AS DateTime))