A muchos nos ha pasado que cuando migramos servidores de datos el idioma también cambia o simplemente por reglas de negocio necesitamos cambiar el formato de fecha de nuestro servidor o sesión.
Si el formato de fecha no se toman en consideración los programadores de aplicaciones, pueden encontrar excepciones en una aplicación al insertar fechas en las tablas o con las fechas en las cláusulas WHERE que no son válidos. Por ejemplo, una fecha dada como 20/05/97 sólo se procesará si el formato de fecha es DD/MM/AA. Sin embargo, una fecha como 12/05/97 se procesará con formatos el DD/MM/AA y MM/DD/AA, posiblemente, la fecha se inserta incorrectamente.
Una solución posible es utilizar el formato estándar ISO para enviar los datos de fecha y hora a SQL Server, que es "AAAAMMDD" (sin separadores). Con el formato ISO es más "internacional" y es independiente del idioma predeterminado.
Otra solución es para que la aplicación cliente comprobar el formato de fecha que se esta utilizado en SQL Server, para asegurarse de que se este pasando un formato válido en las fechas que insertaremos desde la aplicación.
SQL Server proporciona la posibilidad de establecer el formato de fecha y otras opciones de idioma mediante la adición de otro idioma. Debemos tener muy en cuenta que establecer la configuración regional en el panel de control de Windows, el formato de fecha del área local que deseamos, no establecerá un formato de fecha para SQL Server.
a continuación explico como establecer los formatos para cada uno de los casos mencionado en el titulo de este post.
Establecer el idioma en el servidor SQL Server
Para establecer el idioma en el servidor debe agregar un idioma mediante sp_addlanguage. El ejemplo siguiente establece el idioma para inglés de territorio británico y proporciona las fechas en formato DD/MM/AA. En el ejemplo se también se puede aplicar a otros países, pero es posible que necesitará modificar los parámetros de sp_addlanguage.
exec sp_addlanguage 'British', 'English', 'January,February,March,April,May,June,July,August,September,October, November,December', 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec', 'Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday', dmy,1 sp_configure 'default language', 1 reconfigure with override
Para establecer el idioma predeterminado al inglés (Estados Unidos) después de tener instalado otro idioma, utilice las instrucciones SQL siguientes:
sp_configure 'default language', 0
reconfigure with override
Para comprobar qué idioma predeterminado que ha instalado un servidor, utilice el comando SQL siguiente:
sp_configure 'default language'
Si no se muestra ningún resultado indique a SQL Server que le muestre todos los parámetros de configuración con la siguiente instrucción:
sp_configure 'show advanced options, 1
reconfigure with override
Si el valor resultante es 0, el idioma predeterminado inglés (Estados Unidos). Si el resultado no es 0, ejecute el siguiente comando SQL para buscar el instalado formato de idioma predeterminado configuración y la fecha utilizado:
select name ,alias, dateformat from syslanguages where langid = (select value from master..sysconfigures where comment = 'default language')
o
SELECT @@language, @@langid
Establecer el idioma para una sesión.
USE [master]
GO
ALTER LOGIN [TIMOVIL\Elicxvg] WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[Español]
GO
o
También se puede establecer un formato especifico al inicio de un procedimiento almacenado, la sentencia es la siguiente:
set dateformat DMY
dudas o comentarios elicxvg@timovil.com o elicxvg@hotmail.com