powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Преобразование даты в целочисленное представление
23 сообщений из 23, страница 1 из 1
Преобразование даты в целочисленное представление
    #39495939
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сравниваю на клиенте целочисленные значения. А тут понадобилось сравнивать даты. Вот и возник вопрос, можно ли преобразовать на сервере дату в целое число или придется завести на клиенте переменную TDate?

=================
Док.

Win7 Ultim x64/Deb 8.7 i386:
FB 3.0.2.32703, диалект 3, SS(win)/SC(Deb),
Lazarus 1.9(r.55538); FPC 3.1.1 (r.36290), IBX by -Rik-; IBE 2017.4.19.2
...
Рейтинг: 0 / 0
Преобразование даты в целочисленное представление
    #39495943
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
27.07.2017 12:52, Док пишет:

>можно ли преобразовать на сервере дату в целое число или придется завести на клиенте переменную TDate?

можно.
отними от своей даты некоторую "стартовую".
всё равно какую.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Преобразование даты в целочисленное представление
    #39495955
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то TISCDate это и есть целое число. Сравнивай сколько хочешь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Преобразование даты в целочисленное представление
    #39496137
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovВообще-то TISCDate это и есть целое число. Сравнивай сколько хочешь.
На клиенте поди TDateTime, а он double.
...
Рейтинг: 0 / 0
Преобразование даты в целочисленное представление
    #39496161
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийотними от своей даты некоторую "стартовую".
всё равно какую
это самое первое, что пришло в голову. В качестве "стартовой" думал взять самую "старую" в базе

wadmanНа клиенте поди TDateTime
в базе, но кастую к TDate

Dimitry SibiryakovTISCDate это и есть целое число
одной-двумя строками посредством IBX его можно получить, не изучая всего API?
...
Рейтинг: 0 / 0
Преобразование даты в целочисленное представление
    #39496165
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Докодной-двумя строками посредством IBX его можно получить, не изучая всего API?
Дак cast-ом его, cast-ом! А можно и без каста, хоть вычислениями. Разница в 1 - день, 2 = два дня и т.п.
...
Рейтинг: 0 / 0
Преобразование даты в целочисленное представление
    #39496172
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,

ты код покажи :) И обоснуй слова про разницу
...
Рейтинг: 0 / 0
Преобразование даты в целочисленное представление
    #39496196
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокИ обоснуй слова про разницу


Код: sql
1.
select cast(cast('25.01.2017' as date) - cast('01.01.2017' as date) as integer) from rdb$database


> 24
...
Рейтинг: 0 / 0
Преобразование даты в целочисленное представление
    #39496202
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
select iif(cast('25.01.2017' as date) > cast('01.01.2017' as date), '>', '<=') from rdb$database
...
Рейтинг: 0 / 0
Преобразование даты в целочисленное представление
    #39496212
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокDimitry SibiryakovTISCDate это и есть целое число
одной-двумя строками посредством IBX его можно получить, не изучая всего API?

глянь в исходники IBX все геттеры
попробуй тупо TField.AsInteger или TField.AsInt64

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
///Unified Interbase lib

function TSQLDA.GetAsInteger(const Index: Word): Integer;
...
         SQL_TIMESTAMP : Result := PISCTimeStamp(sqldata).timestamp_date - DateOffset; // Only Date
         SQL_TYPE_DATE : Result := PInteger(sqldata)^ - DateOffset;
         SQL_TYPE_TIME : ; // Result := 0; What else ??
...
...
Рейтинг: 0 / 0
Преобразование даты в целочисленное представление
    #39496221
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Докодной-двумя строками посредством IBX его можно получить, не изучая всего API?

Код: sql
1.
MyInDate := PISC_Date(SQL1.FieldByName('MyDate').sqldata)^;


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Преобразование даты в целочисленное представление
    #39496273
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Докэто самое первое, что пришло в голову. В качестве "стартовой" думал взять самую "старую" в базеЗачем? Бери любую. Даже сегодня подойдёт.
Главное, чтобы она больше не менялась.

ЗЫ: Я бы взял 1900 год, например. Просто потому что захотелось, и перфекционизьму претят отрицательные целые.
...
Рейтинг: 0 / 0
Преобразование даты в целочисленное представление
    #39496281
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch ,
у меня потроха по-другому выглядят

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
function TIBXSQLVAR.GetAsInteger: Integer;
begin
  Result := GetAsLong;
end;

function TIBXSQLVAR.GetAsLong: Long;
begin
  result := 0;
  if not IsNull then
    case FXSQLVAR^.sqltype and (not 1) of
      SQL_TEXT, SQL_VARYING: begin
        try
          result := StrToInt(AsString);
        except
          on E: Exception do IBError(ibxeInvalidDataConversion, [nil]);
        end;
      end;
      SQL_SHORT:
        result := Trunc(AdjustScale(Int64(PShort(FXSQLVAR^.sqldata)^),
                                    FXSQLVAR^.sqlscale));
      SQL_LONG:
        result := Trunc(AdjustScale(Int64(PLong(FXSQLVAR^.sqldata)^),
                                    FXSQLVAR^.sqlscale));
      SQL_INT64:
        result := Trunc(AdjustScale(PInt64(FXSQLVAR^.sqldata)^, FXSQLVAR^.sqlscale));
      SQL_DOUBLE, SQL_FLOAT, SQL_D_FLOAT:
        result := Trunc(AsDouble);
      else
        IBError(ibxeInvalidDataConversion, [nil]);
    end;
end;



Dimitry Sibiryakov ,
спасибо, Дим, вечерком гляну.

WildSery ,
по логике, да. Вряд ли в базе будут посещения "старее" начала прошлого века :)

wadman> 24
пофиг. Мне важно, чтобы эта разница для определенной даты была величиной постоянной и гарантированно отличалась от разницы у другой даты.
...
Рейтинг: 0 / 0
Преобразование даты в целочисленное представление
    #39496285
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

нахрена это все надо? в double дата в целой части в днях, аминь. Вот люди придумывают себе занятия...
...
Рейтинг: 0 / 0
Преобразование даты в целочисленное представление
    #39496307
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док> Сравниваю на клиенте целочисленные значения.
Док> А тут понадобилось сравнивать даты. Вот и возник
Док> вопрос, можно ли преобразовать на сервере дату в
Док> целое число или придется завести на клиенте переменную TDate?

То ли я не понял сути проблемы, то ли ХЗ.
Зачем всё это делать? Сравнивай сами даты.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Преобразование даты в целочисленное представление
    #39496312
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv, Гаджимурадов Рустам,

на клиенте я могу либо способ DS попробовать, либо
Докзавести на клиенте переменную TDate
для сравнения. Я спрашивал про серверную часть.
...
Рейтинг: 0 / 0
Преобразование даты в целочисленное представление
    #39496314
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И? Какие проблемы с серверной частью?
Там date = date уже не возвращает true ?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Преобразование даты в целочисленное представление
    #39496321
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

для чего для сравнения дат на клиенте нужно лезть в API? Допустим, если tdatetime было бы целым числом, а не double, что это поменяло бы? Почему на сервере нельзя даты сравнивать, и производить над ними вычисления?
Откуда вот вдруг вообще это всё? :-)
...
Рейтинг: 0 / 0
Преобразование даты в целочисленное представление
    #39496323
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv> для чего для сравнения дат на клиенте нужно лезть в API?

Не, это полбеды. Его нежелание связываться с API вполне разумно.
Правильный вопрос "какой нафиг API, когда проблемы на сервере?" :)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Преобразование даты в целочисленное представление
    #39496335
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообщем, приемлимое решение нашлось, как всегда, неожиданно ;)
kdvв double дата в целой части в днях, аминь.
Наверное, и правда, нет смысла мучать сервер. За познавательную помощь всем спасибо.
...
Рейтинг: 0 / 0
Преобразование даты в целочисленное представление
    #39496362
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, для идущих следом,
на сервере озвученные предложения получились так
Код: sql
1.
2.
3.
SELECT
   TRUNC(CURRENT_TIMESTAMP - CAST(DATE'1900-01-01' AS TIMESTAMP)) AS DATE_INT
FROM RDB$DATABASE


на клиент - еще проще
Код: sql
1.
VarInt:= trunc(Now);

...
Рейтинг: 0 / 0
Преобразование даты в целочисленное представление
    #39496364
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

DATEDIFF(DAY, date '1900-01-01', CURRENT_DATE)
...
Рейтинг: 0 / 0
Преобразование даты в целочисленное представление
    #39496367
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

точно, про эту функцию я и забыл . Спасибо :)
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Преобразование даты в целочисленное представление
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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