«Date» numérique dans la base de données - Comment interagir avec cela en utilisant des dates «normales»?

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

Question

J'utilise cette base de données où la date Colomn est une valeur numérique au lieu d'une valeur de date.

Oui, je sais que je peux changer cela avec une souris, mais toutes les applications utilisant cette base de données ont été faites par l'un de mes prédécesseurs (et tout le monde après lui l'a ignoré et s'est construit). Donc, si je le modifierais à ce jour, beaucoup de demandes AF échoueraient. :(

Eh bien, je fais un aperçu de cette base de données, allant d'une date de spécification à une autre. J'ai essayé d'utiliser une liste déroulante, mais comme vous pouvez le voir, un millier d'options dans une liste est terriblement gênant, voire laid.

J'ai plutôt de petits champs d'entrée pour le jour - mois - an, mais il y a une valse dans la date numérique de la base de données. Je devrais calculer la date à la valeur numérique d'une manière ou d'une autre ...

Il doit y avoir une solution facile à cela. Droit?



J'utilise ASP (VBScript) pour l'application, c'est pour un intraweb et j'ai une base de données d'accès.

Était-ce utile?

La solution

L'accès se convertira en nombre pour vous, comme cela a été mentionné, les dates sont stockées sous forme de numéros.

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")

Modifier RE Commentaire: Voici un petit test qui montre les dates renvoyées:

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

Autres conseils

D'accord .. donc c'était vraiment facile. J'accepterai la réponse de Remou, le nombre numéroté = # 2008 / 12/7 # fait l'affaire.

Mais, pour mettre près de la question, voici la solution à mes propres fonctions avec les fonctions:

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))

production:

9/12/2008, devrait être 39791.

Datetonumeric ('9/12/2008') donne: 39791
Cdate ('39791') donne: 9-12-2008

Parce que cdate ('1') donne: 31-12-1899

Il est fait pour que le 31/12/1899 ne soit pas le jour zéro, mais le premier jour. : /

Merci les gars!

Les magasins d'accès datent en interne en tant que numéro de point flottant (nombre de jours depuis le 31.12.1899 ou quelque chose), avez-vous essayé d'utiliser cdate () pour convertir le numéro à une date? Vous devriez pouvoir interroger en utilisant entre alors.

Une autre possibilité est que la date est stockée numériquement mais non convertie (c'est-à-dire 31121899), dans ce cas, vous devriez être en mesure d'obtenir la date appropriée des pièces en utilisant Format () ou Day () ou Month () ou Year ().

J'espère que cela t'aides.

Malheureusement, la date est stockée comme 39791 -> 9-Dec-2008. Le numéro de point flottant.

J'ai une fonction JavaScript (également écrite par le même prédécesseur) qui convertit la date en un format lisible. C'est l'inverse, le chemin du chemin vers cette valeur numérique qui me déroute.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top