2008-12-09 1 views
0

Я использую эту базу данных, где дата colomn является числовым значением, а не значением даты.Числовой «дата» в базе данных - Как взаимодействовать с этим с помощью «обычных» дат?

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

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

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

там должен это простое решение. Правильно?



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

ответ

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

EDIT повторно комментарий: Вот небольшой тест, который показывает дату вернулся:

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 
0

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

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

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

0

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

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

+0

Это выглядит как «количество дней с 31.12.1899» для меня. Попробуйте CDate, как предлагает Саймон. – JeeBee 2008-12-09 11:25:03

+0

Да, CDate работает, для преобразования числа в дату. :) Но у меня проблемы с преобразованием даты в число ... – Kablam 2008-12-09 11:51:50

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

выход:

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

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

ПОТОМУ CDate ('1') дает: 31-12-1899

Это сделано так, что 31/12/1899 не является днем ​​дня, а днем ​​первым. :/

Спасибо, ребята!

Смежные вопросы