powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / rFunc
25 сообщений из 25, страница 1 из 1
rFunc
    #38418912
Mediv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет, подскажите могу я использовать библиотеку rFunc в Embedded??
Если да, то как это сделать?? куда кинуть dll и как вообще установить ф-ии в базу??
Использую ibExpert.
Спасибо.
...
Рейтинг: 0 / 0
rFunc
    #38418921
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Medivмогу
Не можешь. Запрещаю. Используй встроенные функции.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
rFunc
    #38418927
Mediv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Встроенных не хватает!!!
...
Рейтинг: 0 / 0
rFunc
    #38418930
Mediv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А можно как то по подробнее почему нет??
...
Рейтинг: 0 / 0
rFunc
    #38418941
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MedivВстроенных не хватает!!!
Для чего их не хватает?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
rFunc
    #38418960
Mediv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну к примеру мне нужна ф-ия аналог ф-ии Oracle Last_day, в rFunc она есть LastDayMonth(d), да и вообще много что и понадобиться,
я работаю с Oracle, но щас нужно кое что на Firebird сделать, очень тяжело идет, не хватает ф-ий, приходиться много кода переписывать.
...
Рейтинг: 0 / 0
rFunc
    #38418999
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
rFunc
    #38419002
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MedivLast_day
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SET TERM ^ ;

create or alter procedure LASTDAY (
    DDATE DDATE)
returns (
    ODATE DDATE)
as
begin
  select :ddate - extract(day from :ddate) from rdb$database into :odate;
  suspend;
end
^

SET TERM ; ^
...
Рейтинг: 0 / 0
rFunc
    #38419005
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, эх... Пока писал... :)
...
Рейтинг: 0 / 0
rFunc
    #38419023
Mediv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо.
...
Рейтинг: 0 / 0
rFunc
    #38419079
LastDay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadmanMedivLast_day
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SET TERM ^ ;

create or alter procedure LASTDAY (
    DDATE DDATE)
returns (
    ODATE DDATE)
as
begin
  select :ddate - extract(day from :ddate) from rdb$database into :odate;
  suspend;
end
^

SET TERM ; ^


Только это будет первый день, а не последний
...
Рейтинг: 0 / 0
rFunc
    #38419113
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LastDayТолько это будет первый день, а не последний
Зачем ты это написал?
...
Рейтинг: 0 / 0
rFunc
    #38419117
Dzirt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LastDay...
Только это будет первый день, а не последний
Это будет таки последний день. Но предыдущего месяца :)
Можно так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
create or alter procedure LASTDAY (
    DDATE Date)
returns (
    ODATE Date)
as
begin
    ODATE = DateAdd( 1 month to DDATE ) - extract( Day from DDATE );
    suspend;
end

...
Рейтинг: 0 / 0
rFunc
    #38419119
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LastDayТолько это будет первый день, а не последний
Там таки есть ошибка, но я тебе не скажу какая.
...
Рейтинг: 0 / 0
rFunc
    #38419124
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DzirtМожно так:
Не лучший вариант, ибо есть такие даты как 31.01, то есть экстракт нужно делать от той-же даты, что и в первой половине выражения.
...
Рейтинг: 0 / 0
rFunc
    #38419151
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SET TERM ^ ;

create or alter procedure LASTDAY (
    DDATE DDATE)
returns (
    ODATE DDATE)
as
begin
  select :ddate - extract(day from :ddate) from rdb$database into :odate;
  suspend;
end
^

SET TERM ; ^


Юзать select from rdb$database в ХП - ненужное умножение сущностей, имхо.
:odate = :ddate - extract(day from :ddate)
...
Рейтинг: 0 / 0
rFunc
    #38419160
Dzirt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanDzirtМожно так:
Не лучший вариант, ибо есть такие даты как 31.01, то есть экстракт нужно делать от той-же даты, что и в первой половине выражения.
Ну тогда так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create or alter procedure LASTDAY (
    DDATE date)
returns (
    ODATE date)
AS
begin
    --ODATE = DateAdd( -1 day to DateAdd( 1 month to DateAdd( -Extract( Day from DDATE ) + 1 day to DDATE ) ) );
    ODATE = DateAdd( 1 month to DDATE - (Extract( Day from DDATE ) - 1) ) - 1;
    suspend;
end

...
Рейтинг: 0 / 0
rFunc
    #38419164
Dzirt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще вот у меня есть такая вспомогательная процедура, написанная много-много лет назад еще во времена IB6.0. Работает до сих пор:
Код: 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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
create or alter procedure C$GET_DATE_INFO (
    IN_DATE date)
returns (
    MONTH_BEGIN date,
    MONTH_END date,
    MONTH_LENGTH integer,
    YEAR_BEGIN date,
    YEAR_END date,
    YEAR_LENGTH integer,
    QUARTER smallint,
    QUARTER_BEGIN date,
    QUARTER_END date,
    QUARTER_LENGTH integer)
AS
/*  */
    declare variable LMONTH Integer;
    declare variable LYEAR Integer;
    declare variable LM Integer;
    declare variable LY Integer;
begin
    ------------------------------------------------------------------------------------------------
    -- Процедура вычисляет по заданной во входном параметре дате некоторые другие даты:
    --  - начало и конец месяца, содержащего заданную дату
    --  - начало и конец года, содержащего заданную дату
    --  - номер, начало и конец квартала, содержащего заданную дату
    ------------------------------------------------------------------------------------------------

    if (IN_DATE is not Null) then
      begin
        LMONTH = Extract(Month from IN_DATE);
        LYEAR = Extract(Year from IN_DATE);

        -- месяц
        LM = LMONTH + 1;
        LY = LYEAR;
        MONTH_BEGIN = Cast(LY || '-' || LMONTH || '-01' as Date);
        while (LM > 12) do
          begin
            LM = LM - 12;
            LY = LY + 1;
          end
        MONTH_END = Cast(LY || '-' || LM || '-01' as Date) - 1;

        -- год
        YEAR_BEGIN = Cast(LYEAR || '-01-01' as Date);
        YEAR_END = Cast(LYEAR || '-12-31' as Date);

        -- квартал
        QUARTER = (LMONTH - 1) / 3 + 1;
        LM = (QUARTER - 1) * 3 + 1;
        LY = LYEAR;
        QUARTER_BEGIN = Cast(LY || '-' || LM || '-01' as Date);
        LM = LM + 3;
        while (LM > 12) do
          begin
            LM = LM - 12;
            LY = LY + 1;
          end
        QUARTER_END = Cast(LY || '-' || LM || '-01' as Date) - 1;

        -- продолжительности...
        MONTH_LENGTH = MONTH_END - MONTH_BEGIN + 1;
        YEAR_LENGTH = YEAR_END - YEAR_BEGIN + 1;
        QUARTER_LENGTH = QUARTER_END - QUARTER_BEGIN + 1;
      end

    -- процедура возвращает что-то в любом случае
    suspend;
end

...
Рейтинг: 0 / 0
rFunc
    #38419167
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-BrutalЮзать
Привычка.

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

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE OR ALTER PROCEDURE LASTDAY (
    ADATE DATE = CURRENT_DATE)
RETURNS (
    BYDATE DATE)
AS
BEGIN
  BYDATE = DATEADD(1 MONTH TO DATEADD(-EXTRACT(DAY FROM ADATE) DAY TO ADATE));
  SUSPEND;
END



в тройке красивей будет

Код: plsql
1.
2.
3.
4.
5.
6.
7.
CREATE OR ALTER FUNCTION LASTDAY (
    ADATE DATE = CURRENT_DATE)
RETURNS  DATE
AS
BEGIN
  RETURN DATEADD(1 MONTH TO DATEADD(-EXTRACT(DAY FROM ADATE) DAY TO ADATE));
END
...
Рейтинг: 0 / 0
rFunc
    #38419270
Dzirt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисмой вариант
...
Как уже указали, он будет неправильно работать, например для даты 3.03.2013
...
Рейтинг: 0 / 0
rFunc
    #38419287
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dzirt,
а попробовать. У меня вроде правильно работает.

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

28.03.2013
Гы! Так еще в детстве было известно, что конец марта месяца будет 31.03.2013 :D
...
Рейтинг: 0 / 0
rFunc
    #38419314
LastDay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денисмой вариант

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE OR ALTER PROCEDURE LASTDAY (
    ADATE DATE = CURRENT_DATE)
RETURNS (
    BYDATE DATE)
AS
BEGIN
  BYDATE = DATEADD(1 MONTH TO DATEADD(-EXTRACT(DAY FROM ADATE) DAY TO ADATE));
  SUSPEND;
END



в тройке красивей будет

Код: plsql
1.
2.
3.
4.
5.
6.
7.
CREATE OR ALTER FUNCTION LASTDAY (
    ADATE DATE = CURRENT_DATE)
RETURNS  DATE
AS
BEGIN
  RETURN DATEADD(1 MONTH TO DATEADD(-EXTRACT(DAY FROM ADATE) DAY TO ADATE));
END


Если поменять последовательность (сначала добавить месяц, потом отнять день) - будет работать правильно
...
Рейтинг: 0 / 0
rFunc
    #38419373
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dzirt,

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


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