"Fecha" numérica en la base de datos: ¿cómo interactuar con eso utilizando fechas "normales"?

StackOverflow https://stackoverflow.com/questions/352311

Pregunta

Estoy usando esta base de datos donde la fecha de colomn es un valor numérico en lugar de un valor de fecha.

Sí, sé que puedo cambiar eso con un mouseclick, pero todas las aplicaciones que usan esa base de datos fueron hechas por uno de mis predecesores (y todos tras él lo ignoraron y se construyeron). Entonces, si lo cambiaría hasta la fecha, muchas aplicaciones AF fallarían. :(

Bueno, estoy haciendo una descripción general de esa base de datos, que van desde una fecha específica a otra. Intenté usar una lista desplegable, pero como se puede ver, mil opciones en una lista son terriblemente inconvenientes, incluso feas.

Prefiero tener pequeños campos de entrada para el día - mes - año, pero viene el vals en la fecha numérica en la base de datos. Tendría que calcular la fecha del valor numérico de alguna manera ...

Debe haber una solución fácil para esto. ¿Derecha?



Estoy usando ASP (VBScript) para la aplicación, es para un intraweb y tengo una base de datos de acceso.

¿Fue útil?

Solución

El acceso se convertirá en un número para usted, como se mencionó, las fechas se almacenan como números.

Dim rs As DAO.Recordset

Set rs = CurrentDb.OpenRecordset("TestTable")
rs.AddNew
rs!NumberDate = Now()  'Value stored, eg, 39791.4749074074 '
rs.Update

rs.MoveLast

'To show that it converts back to the correct date / time '
Debug.Print Format(rs!NumberDate, "dd/mm/yyyy hh:nn:ss")

Editar comentario: Aquí hay una pequeña prueba que muestra las fechas devueltas:

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

strFile = "C:\Docs\LTD.mdb"

cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
       "Data Source=" & strFile & ";" & _
       "Persist Security Info=False"

strSQL = "SELECT NumberDate FROM TestTable WHERE NumberDate= #2008/12/7#"

rs.Open strSQL, cn, 3, 3
rs.MoveLast

MsgBox rs.RecordCount

Otros consejos

Correcto ... así que fue realmente fácil. Aceptaré la respuesta de Remou, Where NumberDate = # 2008/12/7 # hace el truco.

Pero, para acercarse al asunto, aquí está la solución a mi propio violín con las funciones:

Function DateToNumeric(dayDate)
    DateToNumeric=DateDiff("d","31/12/1899",dayDate) +1 //yup
End Function

    response.Write("9/12/2008, should be 39791.<br /><br />")
    response.write("DateToNumeric('9/12/2008') gives: " &DateToNumeric("9/12/2008")& "<br />")
    response.write("CDate('39791') gives: " &CDate(39791)&"<br /><br />")
    response.write("BECAUSE CDate('1') gives: " &CDate(1))

producción:

9/12/2008, debe ser 39791.

Daturonumérico ('9/12/2008') da: 39791
CDATE ('39791') da: 9-12-2008

Porque cdate ('1') da: 31-12-1899

Se lo hace para que el 31/12/1899 no sea el día cero, sino el primer día. :/

¡Gracias chicos!

Las tiendas de acceso datan internamente como un número de punto flotante (número de días desde el 31.12.1899 o algo así), ¿ha intentado usar cdate () para convertir el número en una fecha? Debería poder consultar usando entre entonces.

Otra posibilidad es que la fecha se almacena numéricamente pero no se convierte (es decir, 31121899), en este caso debe poder obtener las piezas de fecha apropiadas usando formato () o día () o mes () o año ().

Espero que esto ayude.

Lamentablemente, la fecha se almacena como 39791-> 9-dic-2008. El número de punto flotante.

Tengo una función JavaScript (también escrita por el mismo predecesor) que convierte la fecha en un formato legible. Es al revés, el camino de regreso a ese valor numérico que me desconcierta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top