int и smalldatetime

kosm
Дата: 04.12.2002 09:57:02
Подскажите пожалуйста.
В Access базе конвертация даты из int в smalldatetime проходит как 37354=08.04.2002
Повторяю в QA:

set dateformat ymd
select Convert(datetime, convert(int,37354),4)
select Convert(int, convert(smalldatetime,'2002-04-08'))

результат:

------------------------------------------------------
2002-04-10 00:00:00.000

-----------
37352

Где проблема в таком несовпадении?
tpg
Дата: 04.12.2002 10:51:44
Где проблема в таком несовпадении?

Проблемма в том что акцесси SQL по разному конвертят дату в число.

Чтобы не наступать на эти грабли, ИМХО, более безопасным является метод передачи дат через строку формата определенного стандарта. Я пердпочитаю, например, стандарт ANSI со столетием (yyyy.mm.dd). Хотя мне нравится и ISO со столетием (yyyymmdd). Первый является американским, второй международным.
Алексей Кубенко
Дата: 04.12.2002 11:28:17
Когда из Access'а перегоняешь надо отнимать 2. А причина в том, что все офисные программы (Access,Excell,...) работают на OLE и скорее всего для работы с датами юзают сишный класс COleDateTime, так вот он также имеет разницу с MSSQL в 2 дня.
Gulchatay
Дата: 04.12.2002 12:37:53
в VBA даты считаются от 30 декабря 1899 года, а в SQL с 1 января 1999, вот и разница в 2 дня.
Если хочешь, можешь сам проверить:
1. Запусти из VB:
Dim d As Date
Dim b As Long
d = #1/1/1900#
b = Int(d)
MsgBox Str(b) выдает 2
2. в SQL
set dateformat dmy
declare @date datetime
select @date='01.01.1900'
select convert(int,@date)
go
возвращает 0