0

日付列が日付値ではなく数値であるこのデータベースを使用しています。

はい、マウスクリックでそれを変更できることは知っていますが、そのデータベースを使用するすべてのアプリケーションは、私の前任者の 1 人によって作成されました (そして、彼の後の誰もがそれを無視して構築しました)。したがって、日付に変更すると、多くのアプリケーションが失敗します。:(

さて、私は特定の日付から別の日付まで、そのデータベースの概要を作成しています。ドロップダウン リストを使用してみましたが、おわかりのように、1 つのリストに 1000 のオプションが含まれているのは非常に不便で、見苦しくさえあります。

私はむしろ、日、月、年の小さな入力フィールドを持っていますが、データベースの数値の日付にはワルツがあります。どういうわけか、日付を数値に戻して計算する必要があります...

これには簡単な解決策があるはずです。右?



アプリケーションに ASP(vbscript) を使用しています。これはイントラ Web 用で、Access データベースがあります。

4

4 に答える 4

1

そうです..とても簡単でした。Remou の回答を受け入れます。WHERE NumberDate= #2008/12/7# でうまくいきます。

しかし、問題に近づくために、これが関数をいじる私自身の解決策です:

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

出力:

2008 年 9 月 12 日、39791 のはずです。

DateToNumeric('9/12/2008') の結果: 39791
CDate('39791') の結果: 9-12-2008

CDate('1') が与えるため: 31-12-1899

1899 年 12 月 31 日が 0 日目ではなく 1 日目になるように作成されています。:/

みんなありがとう!

于 2008-12-09T12:38:16.600 に答える
1

前述のように、アクセスは数値に変換されます。日付は数値として保存されます。

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

コメントの編集: 返された日付を示す小さなテストを次に示します。

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
于 2008-12-09T11:26:16.683 に答える
0

Access は日付を浮動小数点数 (1899 年 12 月 31 日からの日数など) として内部的に保存します。CDate() を使用して数値を日付に変換しようとしましたか? BETWEEN を使用してクエリを実行できるはずです。

もう 1 つの可能性は、日付が数値で格納されているが変換されていない (つまり 31121899) ことです。この場合、Format() または Day() または Month() または Year() のいずれかを使用して適切な日付部分を取得できるはずです。

お役に立てれば。

于 2008-12-09T10:28:34.100 に答える
0

残念ながら、日付は 39791 -> 2008 年 12 月 9 日として保存されます。浮動小数点数。

日付を読み取り可能な形式に変換する JavaScript 関数 (これも同じ前任者によって作成された) があります。それは逆で、私を当惑させるその数値に戻る方法です。

于 2008-12-09T10:37:00.603 に答える