Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Преобразование даты в целочисленное представление / 23 сообщений из 23, страница 1 из 1
27.07.2017, 12:52
    #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
27.07.2017, 12:55
    #39495943
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты в целочисленное представление
27.07.2017 12:52, Док пишет:

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

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

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

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

ты код покажи :) И обоснуй слова про разницу
...
Рейтинг: 0 / 0
27.07.2017, 16:42
    #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
27.07.2017, 16:45
    #39496202
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты в целочисленное представление
Код: sql
1.
select iif(cast('25.01.2017' as date) > cast('01.01.2017' as date), '>', '<=') from rdb$database
...
Рейтинг: 0 / 0
27.07.2017, 16:57
    #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
27.07.2017, 17:07
    #39496221
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты в целочисленное представление
Докодной-двумя строками посредством IBX его можно получить, не изучая всего API?

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


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

ЗЫ: Я бы взял 1900 год, например. Просто потому что захотелось, и перфекционизьму претят отрицательные целые.
...
Рейтинг: 0 / 0
27.07.2017, 18:53
    #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
27.07.2017, 19:08
    #39496285
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты в целочисленное представление
Док,

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

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

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

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

Не, это полбеды. Его нежелание связываться с API вполне разумно.
Правильный вопрос "какой нафиг API, когда проблемы на сервере?" :)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.07.2017, 22:19
    #39496335
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты в целочисленное представление
Вообщем, приемлимое решение нашлось, как всегда, неожиданно ;)
kdvв double дата в целой части в днях, аминь.
Наверное, и правда, нет смысла мучать сервер. За познавательную помощь всем спасибо.
...
Рейтинг: 0 / 0
27.07.2017, 23:22
    #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
27.07.2017, 23:28
    #39496364
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование даты в целочисленное представление
Док,

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

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


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