2009-07-27 8 views
10

En mi DB de prueba, las fechas se muestran en formato DD/MM/YYYY. Al mostrarlo me refiero a cuando hace clic derecho, abre la tabla en Management Studio, los datos devueltos se muestran en un formato DD/MM/AAAA.Problemas de hora de SQL Server. ¿Americano contra británico?

Lo curioso es que cuando escribo T-SQL para recuperar registros, tengo que ingresar un formato MM/DD/YYYY para recuperar los datos correctos. ¿Hay alguna forma de que pueda alinear esto en un formato DD/MM/YYYY?

Respuesta

11

Puede utilizar SET LANGUAGE para elegir el formato de fecha que SQL Server espera en las consultas (creo estudio de la gerencia utiliza la configuración regional del equipo cliente para fines de presentación, no segura, sin embargo). Sin embargo, sugiero pasar valores usando parámetros en lugar de incrustarlos en la declaración de consulta. No encontrará ningún problema si usa parámetros. Todo está cuidado.

set language us_english 
declare @d datetime = '1929/12/18' 

set language british 
declare @d datetime = '1929/12/18' -- fails 

Para cambiar el idioma por defecto del servidor:

declare @langid int = (select langid from syslanguages where name = 'british') 
exec sp_configure 'default language', @langid 
reconfigure with override 
+0

Esto es genial, pero estoy buscando una solución permanente en lugar de una solución de sesión. – super9

+0

Dulce. FYI el nombre correcto de la tabla es sys.syslanguages. Además, descubrí que también puede cambiar el idioma predeterminado en un nivel de usuario yendo a Seguridad -> Inicio de sesión de usuario -> Propiedades -> Idioma. Gracias por eso Mehrdad – super9

+0

Nai: syslanguages ​​solo funcionará si estás en la base de datos master. Agregar 'sys' a esa línea hizo que las barras de desplazamiento aparecieran, así que lo acorté;) –

4

lo personal, siempre utilización formato AAAA-MM-DD (o AAAAMMDD) ya que no es específico de la cultura, y, bueno, Supongo que me atrae porque es "lógico" (especialmente cuando es seguido por un tiempo).

[Editar: Estoy hablando de lo que puse en mis scripts SQL para asegurar la compatibilidad con independencia de la configuración del servidor, no lo que "muestra" de SQL Server]

+0

¿Cómo se puede cambiar la consulta T-SQL Datime por defecto? – super9

+0

Lo sentimos, debería haber sido más específico - respuesta actualizada. –

1

En casi todos los casos, la forma correcta de resolver esto es simplemente no tratar la fecha como una cadena. Si pasa un parámetro, o utiliza el valor de la columna (mecanografiado), la conversión del texto del servidor simplemente no es un factor. Además de evitar el problema de i18n, esto también reduce la superficie de ataque de inyección. Y ahorra algunos ciclos de CPU, también ;-p

Si está utilizando EXEC para SQL dinámico, entonces esto también se debe parametrizar a través de sp_ExecuteSQL.

+0

Las fechas se almacenan físicamente como formatos DATETIME. Lo siento si no estaba claro. – super9

+0

Supuse eso; mi punto es que no debería * importar * cómo el servidor quiere manejarlos como texto si simplemente nunca (en su sistema) * los trata como texto. –

+0

Oh, claro, entiendo lo que quieres decir. Normalmente los paso como variables, pero un buen consejo, no obstante. ¡Gracias por eso! – super9

2

Si pasa en DATETIME en el formato

dd MMM yyyy 

por ejemplo

"11 JUL 2009" 

nunca hay ninguna ambigüedad en torno mes y la fecha y por lo tanto nunca debe tener un problema

1

I intente utilizar la forma canónica ODBC de una fecha siempre que sea posible {d 'aaaa-mm-dd'} De esta manera sé cómo se sirve sql lo interpretará. Funciona en TSQL bien.

3

Puede establecer el idioma predeterminado para cada indvidual SQL Server login. No recuerdo bien, pero algo como esto:

sp_defaultlanguage @loginame = 'LoginName', @language = 'Language' 
1

O bien, añada esto a su sitio web.fichero de configuración:

</system.web> 
    <globalization culture="en-US" uiCulture="en-US" /> 
</system.web> 

o puede agregar esta declaración en la página:

<%@ Page uiCulture="en-US" culture="en-US" %> 

Esperanza esta ayuda.

Cuestiones relacionadas