none
Formato de fecha se cambia cuando se cambia el idioma del logins - sql server 2008 R2 RRS feed

  • Pregunta

  • Hola cambien el idioma de mi usuario login de sql de Ingles a españos para poder recibir los mensajes de error en español, pero ahoa mi sistema que antes enviaba asi '2011-12-30' ahora me pide que envie '2011-30-12', a que se debe, quiero volverlo como era anteriormente pero manteniendo el formato español.. gracias
    viernes, 8 de julio de 2011 2:21

Respuestas

  • Solo añadir a los comentarios de los compañeros, que el formato que comenta Carlos es el uso del Standard ANSI para las fechas, y agrosomodo para entendernos, es así como trata internamente sql las fechars, si empiezas a utilizar este formato para las consultas no tendras problemas en ninguna de tus aplicaciones por más que el usuario este configurado en Ingles,Español,... (ya que el idioma del usuario fuerza una conversión del formato ANSI para la fecha, a ese idioma o formato del usuario, a la hora de mostrarlas y que las introduzcas si no usas el formato ANSI...), ni tampoco si en el Windows está definido en su configuración regional cualquier cosa.

    -- Opción con ANSI: (recomendado)
    select count(*) from tabla where orderdate >='19970801'

    -- Opción que estamos acostumbrados a usar (no recomendado, dependerá del lenguaje/idioma de cada sesión/usuario ):
    select count(*) from tabla where orderdate >='01-08-1997'

     

    Y or otro lado, solo hacer el inciso que realilzar el cambio del idioma usando "SET DATEFORMAT", es un cambio temporal ya que cuando vuelva el usuario a logarse en sql, retomará su antiguo idima definido en su login de SQL.

    SET DATEFORMAT no cambia el idima definido en su login, solo hace un cambio temporal en la sesion en curso y se pierde cuando finaliza la sesión.

     

     


     Norman M. Pardell 

    ||Microsoft Certified IT Professional|| Database Administrator. Database Developer. SQL Server 2008



    • Marcado como respuesta Luis Mata viernes, 8 de julio de 2011 22:48
    viernes, 8 de julio de 2011 6:51
  • YYYYMMDD (sin guiones) tiene que funcionarte, sea cual sea el idioma que tengas establecido. Ejecuta el siguiente script, verás que siempre te devuelve la fecha correcta:

    DECLARE @f AS DATETIME, @f2 AS DATETIME

    SET DATEFORMAT dmy

    SELECT @f = '08-07-2011', @f2 = '20110708'

    SELECT @f AS [dmy], @f2 AS [universal]

    SET DATEFORMAT ydm

    SELECT @f = '2011-08-07', @f2 = '20110708'

    SELECT @f AS [ydm], @f2 AS [universal]

    SET DATEFORMAT mdy

    SELECT @f = '07-08-2011', @f2 = '20110708'

    SELECT @f AS [mdy], @f2 AS [universal]

     

    • Marcado como respuesta Luis Mata viernes, 8 de julio de 2011 22:48
    viernes, 8 de julio de 2011 15:14

Todas las respuestas

  • Una vez abierta la conexión al servidor puedes cambiar el formato de fechas ejecutando un comando SET DATEFORMAT. Por ejemplo, para que el formato sea año-mes-día:

    SET DATEFORMAT ymd;

     

    viernes, 8 de julio de 2011 5:55
  • Si quieres olvidarte de este tipo de problemas cuando envíes fechas a SQL Server, usa el formato "yyyymmdd" o "yyyymmdd hh:mn:ss". Eso es independiente del lenguaje que estés usando, y siempre se interpreta sin problemas.
    viernes, 8 de julio de 2011 6:34
  • Luis, cuando camgias el idioma del usuario las consecuencias son varias, una de ellas es que te devuelve los mensajes en español, la otra es que el formato de fecha, también se cambia, Las soluciones te las han contado Alberto y Carlos te valdrán.
    Comparte lo que sepas, aprende lo que no sepas (FGG) http://www.portalsql.com
    viernes, 8 de julio de 2011 6:39
    Moderador
  • Solo añadir a los comentarios de los compañeros, que el formato que comenta Carlos es el uso del Standard ANSI para las fechas, y agrosomodo para entendernos, es así como trata internamente sql las fechars, si empiezas a utilizar este formato para las consultas no tendras problemas en ninguna de tus aplicaciones por más que el usuario este configurado en Ingles,Español,... (ya que el idioma del usuario fuerza una conversión del formato ANSI para la fecha, a ese idioma o formato del usuario, a la hora de mostrarlas y que las introduzcas si no usas el formato ANSI...), ni tampoco si en el Windows está definido en su configuración regional cualquier cosa.

    -- Opción con ANSI: (recomendado)
    select count(*) from tabla where orderdate >='19970801'

    -- Opción que estamos acostumbrados a usar (no recomendado, dependerá del lenguaje/idioma de cada sesión/usuario ):
    select count(*) from tabla where orderdate >='01-08-1997'

     

    Y or otro lado, solo hacer el inciso que realilzar el cambio del idioma usando "SET DATEFORMAT", es un cambio temporal ya que cuando vuelva el usuario a logarse en sql, retomará su antiguo idima definido en su login de SQL.

    SET DATEFORMAT no cambia el idima definido en su login, solo hace un cambio temporal en la sesion en curso y se pierde cuando finaliza la sesión.

     

     


     Norman M. Pardell 

    ||Microsoft Certified IT Professional|| Database Administrator. Database Developer. SQL Server 2008



    • Marcado como respuesta Luis Mata viernes, 8 de julio de 2011 22:48
    viernes, 8 de julio de 2011 6:51
  • Solo una puntualización, internamente SQL Server trata las fechas de forma diferente dependiendo de la versión y el tipo que elijas, Por ejemplo el tipo smalldatetime las trataba como distancia desde 1 de enero de 1900 en formato int, y la parte decimal para las horas y minutos.
    select CAST(0 as smalldatetime)

    Devuelve 1-enero de 1900 a las 0 horas
    select CAST(0.002 as smalldatetime)
    

    1-enero de 1900 3 minutos depues
    Y hoy es el día 40730
    select CAST(40730 as smalldatetime)

    Esto ha cambiado con los nuevos tipos de datos, aunque insisto, es irrelevante, internatmente no se almacena en formato ansi ninguno de ellos AFAIK,
     
     

    Comparte lo que sepas, aprende lo que no sepas (FGG) http://www.portalsql.com
    viernes, 8 de julio de 2011 8:55
    Moderador
  • Lo que pasa es que siempre trabaje asi, enviando los formatos YYYYMMDD, ahora que cambie el idioma del usuario a español me pide que pase YYYYDDMM, y en mi aplicacion de desarrollo es independiente porque ahi veo la fecha asi: DDMMYYYY y cuando los paso no hay problema, osea si paso el DATE() independientemente se almacena bien en SQL SERVER, solo se presenta cuando paso la fecha en comillas simples '2011-05-23' ahor ame pide que pase '2011-23-05'

    Esta es una aplicaion que ya esta en produccion, que sera lo que paso? no me digan que tengo que cambiar todo el formato de mi sistema.


    Sql server 2008 R2
    viernes, 8 de julio de 2011 14:55
  • YYYYMMDD (sin guiones) tiene que funcionarte, sea cual sea el idioma que tengas establecido. Ejecuta el siguiente script, verás que siempre te devuelve la fecha correcta:

    DECLARE @f AS DATETIME, @f2 AS DATETIME

    SET DATEFORMAT dmy

    SELECT @f = '08-07-2011', @f2 = '20110708'

    SELECT @f AS [dmy], @f2 AS [universal]

    SET DATEFORMAT ydm

    SELECT @f = '2011-08-07', @f2 = '20110708'

    SELECT @f AS [ydm], @f2 AS [universal]

    SET DATEFORMAT mdy

    SELECT @f = '07-08-2011', @f2 = '20110708'

    SELECT @f AS [mdy], @f2 AS [universal]

     

    • Marcado como respuesta Luis Mata viernes, 8 de julio de 2011 22:48
    viernes, 8 de julio de 2011 15:14
  • UMMM interesante, nunca habia trabajado asi, un cambio de chip al cerebro con los datos fecha, a empezar entonces... Muchisisisismas gracias


    Sql server 2008 R2
    viernes, 8 de julio de 2011 15:42
  • Luis, marca las respuestas que te hayan ayudado, así los proximos ya las encuentran :)
    Comparte lo que sepas, aprende lo que no sepas (FGG) http://www.portalsql.com
    viernes, 8 de julio de 2011 16:25
    Moderador