jueves, 4 de diciembre de 2014

Formato de Fechas en SQL SERVER

Posted by InfoTacticas Soluciones  |  No comments

Si su servidor SQL Server está en lenguaje inglés, el formato en que se guardan las fechas es MM/DD/YY.
Si los desarrolladores no tenemos en cuenta estos formatos de fecha, podemos ocasionar que se inserten fechas érroneas, por ejemplo si quiero consultar una fecha 05 de febrero del 2015, en formato español seria '05/02/2015', pero si nuestro servidor está en idioma inglés. a la hora de devolver los resultados, la fecha considerada sería 02 de Mayo del 2015.

Entonces, algunas de las opciones para evitar estos inconvenientes a la hora de trabajar con fechas en SQL Server es:

  • Utilizar el formato estándar de ISO para enviar los datos de fecha y hora a SQL Server, que es "YYYYMMDD HH:mm:ss" (sin separadores). Con el formato ISO es más "internacional" y es independiente del idioma predeterminado. Si yo empiezo a utilizar este formato para mis consultas no tendré problemas en ninguna de mis aplicaciones por mas que nuestro usuario este configurado en Ingles, Español o lo que fuere, ni tampoco si en un Windows tengo definido en su configuración regional cualquier cosa.

  • Por ejemplo:
    --
    --
    SELECT * FROM Paciente WHERE FechaNacimiento = '19820827'
    
  • Yo lo suelo hacer, si es que estoy consultando en la misma ventana para Queries del SQL Server, primero ejecuto: set dateformat dmy que me permite trabajar, en esa ventana de consultas, las fechas en formato dmy y también tendría que usar la función CONVERT para convertir el tipo de dato DATETIME a VARCHAR, pero antes es necesario decirle que lo convierta en un formato de DD/MM/YYYY, para eso se usa como tercer parametro de la funcion convert el valor: 103.
    Por ejemplo:
    --
    --
    SELECT * FROM Paciente WHERE convert(varchar(10), FechaNacimiento, 103) = '27/08/1982'
    
    Así, la fecha consultada sería reconocida como el 27 de agosto de 1982. En el caso que quiera consultar dentro de un procedimiento almacenado, lo realizaría utilizando, sería de la siguiente manera:
    create procedure sp_ObtenerPacientesSegunFechaNacimiento
    @FechaNacimientoConsulta datetime
    as
       SELECT IdPaciente, Nombres, Apellidos FROM Paciente 
       WHERE convert(varchar(10), FechaNacimiento, 103) = convert(varchar(10), @FechaNacimientoConsulta, 103)
    

12/04/2014 01:22:00 p. m. Share:

0 comentarios:

back to top