none
Conocer el formato de fecha de la base de datos sql

    Pregunta

  • Como puedo saber que formato de fecha admite determinado campo en la base de datos SQL.

     

    Tengo el siguiente problema:

    Programo mi aplicación con SQL en Español, donde las fechas son dd/mm/aaaa

    Pero al momento de subir mi pagina a un servidor.

    SQL esta en Ingles y el formato de fecha es mm/dd/aaaa

    Entonces mi aplicación produce un error al insertar una fecha.

     

    Lo que intento hacer es:

    Antes de insertar una fecha pueda hacer una consulta y que esta me regrese el fortato de fecha que admite el campo sql.

    Asi yo formateo la fecha y la inserto con el formato correcto.

     

    Nota:

    No lo hago directamente en sql en ingles por que la aplicacion la usan varias personas y algunos los tienen en ingles y otros en español, asi que no puedo programar para uno solo, esto tendra que ser dinamico.

     

    Un saludo.

     

    Gracias

    viernes, 09 de noviembre de 2007 0:43

Respuestas

  • Hola Roberto,

     

    Puedes guardar el formato en un nvarchar(8) de este modo aaammdd y formatearlo desde tu aplicación.

     

    Un Saludo

     

    viernes, 09 de noviembre de 2007 8:03
  • La forma prolija de trabajar con fechas en SQL es utilizar el formato ISO (yyyymmdd).  Con este formato, te independizas totalmente del lenguaje o configuración regional del servidor.

     

    Saludos

     

    Pablo

    viernes, 09 de noviembre de 2007 13:48
  • A nivel de la base de datos, el dato es un datetime o un smalldatetime.

     

    Si insertas directamente desde la aplicación lo pasas como Insert ..... values (... , '20071109', ....)

     

    Si lo pasas a un stored procedure igual, el parámetro se crea como smalldatetime or datetime y se pasa en ese formato.

     

    El motor cuando le llega el dato, "se da cuenta" que el formato es ISO y lo almacena como corresponde.

     

    Saludos

     

    Pablo

    viernes, 09 de noviembre de 2007 16:58

Todas las respuestas

  • Hola Roberto,

     

    Puedes guardar el formato en un nvarchar(8) de este modo aaammdd y formatearlo desde tu aplicación.

     

    Un Saludo

     

    viernes, 09 de noviembre de 2007 8:03
  • Hola Roberto,

     

    Si guardas el tipo correcto de dateTime a DateTime te da error?

    Has probado de guardar como formato Universal ? Independiente de la cultura ?

     

    Saludos.

     

     

    viernes, 09 de noviembre de 2007 10:41
  • La forma prolija de trabajar con fechas en SQL es utilizar el formato ISO (yyyymmdd).  Con este formato, te independizas totalmente del lenguaje o configuración regional del servidor.

     

    Saludos

     

    Pablo

    viernes, 09 de noviembre de 2007 13:48
  • Muchas gracias por sus respuestas.

     

    Entonces. en la base de datos ¿como debo de dar de alta el campo para que acepte ese formato de fecha yyymmdd?

     

    Saludos

    viernes, 09 de noviembre de 2007 16:53
  • A nivel de la base de datos, el dato es un datetime o un smalldatetime.

     

    Si insertas directamente desde la aplicación lo pasas como Insert ..... values (... , '20071109', ....)

     

    Si lo pasas a un stored procedure igual, el parámetro se crea como smalldatetime or datetime y se pasa en ese formato.

     

    El motor cuando le llega el dato, "se da cuenta" que el formato es ISO y lo almacena como corresponde.

     

    Saludos

     

    Pablo

    viernes, 09 de noviembre de 2007 16:58
  • Muchas Gracias Amigo

     

    Ya me hice una Clase nomas para que no se me olvide.

     

    Bloque de código

    Imports Microsoft.VisualBasic

    Public Class Fechas

    Public Enum TipoFecha

    Fecha_Corta = 1

    Fecha_Larga = 2

    Hora_Corta = 3

    Hora_Larga = 4

    Fecha_y_Hora = 5

    Fecha_y_Hora_Con_Segundos = 6

    Fecha_y_Hora_Corta = 7

    Fecha_y_Hora_Corta_Con_Segundos = 8

    Dia_Mes = 9

    Fecha_Formato_RFC1123 = 10

    Fecha_Ordenable = 11

    Formato_Universal = 12

    End Enum

    Public Shared Function Fecha(ByVal LaFecha As DateTime, ByVal iTipo As TipoFecha) As String

    Dim sTipo As String = "u" 'Formato Universal

     

    If IsDate(LaFecha) = False Then

    Return "El valor no es una fecha"

    Exit Function

    End If

     

    Select Case iTipo

    Case 1

    sTipo = "d" 'Fecha corta: 28/09/2007

    Case 2

    sTipo = "D" 'Fecha larga: viernes, 28 de Septiembre de 2007

    Case 3

    sTipo = "t" 'Hora corta: 11:03

    Case 4

    sTipo = "T" 'Hora larga: 11:03:45

    Case 5

    sTipo = "f" 'Fecha y hora: viernes, 28 de Septiembre de 2007 11:04

    Case 6

    sTipo = "F" 'Fecha y hora (con segundos): viernes, 28 de Septiembre de 2007 11:04:21

    Case 7

    sTipo = "g" 'Fecha y hora cortas (por defecto del sistema): 28/09/2007 11:06

    Case 8

    sTipo = "G" 'Fecha y hora cortas (por defecto del sistema) con segundos: 28/09/2007 11:06:46

    Case 9

    sTipo = "m" 'Día y mes: 28 septiembre

    Case 10

    sTipo = "r" 'Fecha en formato RFC1123: Fri, 28 Sep 2007 11:08:39 GMT

    Case 11

    sTipo = "s" 'Fecha ordenable: 2007-09-28T11:09:03 (Va de mayor importancia a menor)

    Case 12

    sTipo = "u" 'Formato universal: 2007-09-28 11:09:54Z

    End Select

    Return String.Format("{0:" & sTipo & "}", LaFecha)

    End Function

    End Class

     

     

     

    MsgBox(Fechas.Fecha("2007/11/09", Fechas.TipoFecha.Fecha_Corta))

    MsgBox(Fechas.Fecha(DateTime.Now, Fechas.TipoFecha.Fecha_Corta))

    Fechas.Fecha(DateTime.Now, Fechas.TipoFecha.Fecha_Corta)

     

    2007/11/09 Que fecha tengo o la que quiero convertir.

    Fechas.TipoFecha.Fecha_Corta A que formato la quiero.

     

    Muchas Gracias

    viernes, 09 de noviembre de 2007 17:33
  • Pablo buena solucion te agradezco

    Juan Carlos

    sábado, 25 de enero de 2014 10:24