Числовая «дата» в базе данных - как взаимодействовать с этим, используя «нормальные» даты?

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

Вопрос

Я использую эту базу данных, где Date Colomn является числовым значением вместо значения даты.

Да, я знаю, что могу изменить это с помощью MouseClick, но все приложения, использующие эту базу данных, были сделаны одним из моих предшественников (и все после него просто проигнорировали ее и построили). Так что, если бы я изменил его на сегодняшний день, приложения AF потерпят неудачу. :(

Ну, я делаю обзор этой базы данных, от одной даты спецификации до другой. Я попытался использовать раскрывающийся список, но, как вы можете сказать, тысяча вариантов в одном списке ужасно неудобна, даже уродливо.

У меня скорее есть небольшие входные установки в течение дня - месяц - год, но в базе данных приходит валтц, который наступает. Мне придется как -то рассчитать дату к числовому значению ...

Там должно быть простое решение для этого. Верно?



Я использую ASP (VBScript) для приложения, это для IntraweB, и у меня есть база данных доступа.

Это было полезно?

Решение

Доступ преобразуется в номер для вас, как было упомянуто, даты хранятся в виде чисел.

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

Редактировать Re Comment: вот небольшой тест, в котором отображаются даты возвращенных дат:

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

Другие советы

Верно .. так что это было очень легко. Я приму ответ Remou, то, где 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))

выход:

9/12/2008, должен быть 39791.

DateToNumeric ('9/12/2008') дает: 39791
Cdate ('39791') дает: 9-12-2008

Потому что Cdate ('1') дает: 31-12-1899

Это сделано так, что 31/12/1899 - это не дневное ноль, а первый день. :/

Спасибо, парни!

Доступ к магазинам датируется внутренним номером с плавающей запятой (количество дней с 31.12.1899 или что -то в этом роде), вы пробовали использовать CDATE () для преобразования номера обратно в дату? Вы должны быть в состоянии запросить использование между этим.

Другая возможность состоит в том, что дата хранится численно, но не преобразована (т. 31121899), в этом случае вы сможете получить соответствующие детали даты, используя либо формат (), либо Day () или Month () или год ().

Надеюсь это поможет.

К сожалению, дата хранится как 39791-> 9 декабря 2008 года. Номер плавающей запятой.

У меня есть функция JavaScript (также написанную тем же предшественником), которая конвертирует дату в читаемый формат. Это наоборот, путь назад к тому числовому значению, которое сбивает меня с толку.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top