Числовая «дата» в базе данных - Как взаимодействовать с ней, используя «нормальные» даты? - PullRequest
0 голосов
/ 09 декабря 2008

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

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

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

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

Для этого должно быть простое решение. Правильно?



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

Ответы [ 4 ]

1 голос
/ 09 декабря 2008

Верно .. так что это было очень легко. Я приму ответ Рему, ГДЕ 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.1999 - это не день ноль, а день первый. : /

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

1 голос
/ 09 декабря 2008

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

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
0 голосов
/ 09 декабря 2008

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

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

0 голосов
/ 09 декабря 2008

Access хранит дату внутри себя как число с плавающей запятой (количество дней с 31.12.1899 или около того), вы пытались использовать CDate () для преобразования числа обратно в дату? Тогда вы сможете запросить, используя МЕЖДУ.

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

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

...