Числовая «дата» в базе данных - как взаимодействовать с этим, используя «нормальные» даты?
-
20-08-2019 - |
Вопрос
Я использую эту базу данных, где 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 (также написанную тем же предшественником), которая конвертирует дату в читаемый формат. Это наоборот, путь назад к тому числовому значению, которое сбивает меня с толку.