Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / date это date || datetime / 6 сообщений из 6, страница 1 из 1
03.10.2008, 23:41
    #35575994
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
date это date || datetime
http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.blocks/html/blocks/blocks36.htm
date columns hold dates from January 1, 0001 to December 31, 9999. Storage size is 4 bytes

но
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
declare
   @dtFirstPeriodDate datetime,
   @dtLastPeriodDate datetime,
   @dtFirstPeriodDate_ date,
   @dtLastPeriodDate_ date,
   @dtCheckDate datetime

set @dtFirstPeriodDate='20080925'
set @dtLastPeriodDate='20081003 23:59:59'
set @dtFirstPeriodDate_=@dtFirstPeriodDate
set @dtLastPeriodDate_='20081003 23:59:59'
set @dtCheckDate=getdate()

select @dtFirstPeriodDate, @dtLastPeriodDate, @dtFirstPeriodDate_, @dtLastPeriodDate_, @dtCheckDate

if (@dtCheckDate between @dtFirstPeriodDate and @dtLastPeriodDate)
print 'yes'

if (@dtCheckDate between @dtFirstPeriodDate_ and @dtLastPeriodDate_)
print 'yes'
два раза yes на select @@version
Adaptive Server Enterprise/15.0.2/EBF 14332/P/NT (IX86)/Windows 2000/ase1502/2486/32-bit/OPT/Thu May 24 04:10:36 2007

хотя, насколько я понимаю, в @dtLastPeriodDate_ временнАя составляющаяя д.б. отсечена (т.е. стала бы '20081003 00:00:00') и тогда бы второй if не отработал бы... Или я где-то что-то упустил из виду?..
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
04.10.2008, 00:09
    #35576009
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
date это date || datetime
Гм...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
declare
   @dtFirstPeriodDate datetime,
   @dtLastPeriodDate datetime,
   @dtFirstPeriodDate_ date,
   @dtLastPeriodDate_ date,
   @dtCheckDate datetime

set @dtFirstPeriodDate='20080925'
set @dtLastPeriodDate='20081003 00:00:00'
set @dtFirstPeriodDate_=@dtFirstPeriodDate
set @dtLastPeriodDate_='20081003 00:00:00'
set @dtCheckDate='20081003 13:13:13'

select @dtFirstPeriodDate, @dtLastPeriodDate, @dtFirstPeriodDate_, @dtLastPeriodDate_, @dtCheckDate

if (@dtCheckDate between @dtFirstPeriodDate and @dtLastPeriodDate)
print 'yes 1'

if (@dtCheckDate between @dtFirstPeriodDate_ and @dtLastPeriodDate_)
print 'yes 2'
тока yes 2 Получается, что для date автоматом подтягивается 23:59:59?
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
04.10.2008, 00:23
    #35576015
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
date это date || datetime
При сравнении datetime и date оно делает конвертацию datetime в date c обрезкой временной части.
...
Рейтинг: 0 / 0
04.10.2008, 00:35
    #35576020
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
date это date || datetime
А SA11 приводит date к datetime для сравнения...
...
Рейтинг: 0 / 0
04.10.2008, 13:18
    #35576205
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
date это date || datetime
White Owl
При сравнении datetime и date оно делает конвертацию datetime в date c обрезкой временной части.

Если честно, то у меня первая, так сказать "естесственная", реакция была аналогичная: типо все "правильно". Но потом, когда уже начал думать о неявном приведении типов, которое, как правило, предусматривает подтяжку меньшего к большему (т.е. - расширение), такое поведение - нетривиально. BTW, а где об этой нетривиальности ASE можно почитать? Ткните url'ом, pls... Потому как здесь - можно искать до второго пришествия

White Owl
А SA11 приводит date к datetime для сравнения

На характер проверил в Firebird 2.0 WI-V6.3.3.12981
Код: plaintext
1.
2.
select * from rdb$database where cast('04.10.2008 13:13:13' as timestamp) between cast('04.10.2008' as date) and cast('04.10.2008' as date) // empty recordset
select * from rdb$database where cast('04.10.2008 13:13:13' as timestamp) between cast('04.10.2008' as date) and cast('05.10.2008' as date) // !empty recordset
- там аналогично date приводится к timestamp...
ASE же
Код: plaintext
1.
2.
select * from master..sysdatabases where cast('04.10.2008 13:13:13' as datetime) between cast('04.10.2008' as date) and cast('04.10.2008' as date) // !empty recordset
select * from master..sysdatabases where cast('04.10.2008 13:13:13' as datetime) between cast('04.10.2008' as date) and cast('05.10.2008' as date) // !empty recordset
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
04.10.2008, 20:03
    #35576396
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
date это date || datetime
Ex_Soft White OwlПри сравнении datetime и date оно делает конвертацию datetime в date c обрезкой временной части.Если честно, то у меня первая, так сказать "естесственная", реакция была аналогичная: типо все "правильно".Так я не говорил что "все правильно", я просто сказал что происходит.
Я тоже считаю что это нетипично и неправильно. Осталось только убедить в этом сайбезов.

Ex_SoftBTW, а где об этой нетривиальности ASE можно почитать? Ткните url'ом, pls... Потому как здесь - можно искать до второго пришествия
Увы, но это недокументированная фича ... или баг?
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / date это date || datetime / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]