Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Даты в хранимых процедурах (FireBird 1.5)


Страницы:   1 2

Slider007 ©   (2007-06-04 06:44:00) 

Ребята есть у меня 3 переменных - d,m,y (день, месяц, год) типа integer.
Вопрос в следующим - как можно из них переменную типа Date состряпать внутри хранимой процедуры ? По сути нужно то, что делает EncodeDate в Делфи. Или UDF свой писать придется ?


sniknik   (2007-06-04 12:38:00) [1]

> Написал заново ТО ЖЕ САМОЕ. Всё заработало.
это тебе так кажется что тоже самое... ты даже тут приводишь куски одной и той же процедуры и в одной версии параметр дата в другой целое...


Slider007   (2007-06-04 12:23:00) [2]

И тем кого не указал тож спасибо ;)


Slider007   (2007-06-04 12:23:00) [3]

sniknik ©   (04.06.07 11:56) [18]
Desdechado ©   (04.06.07 12:16) [21]
stud ©   (04.06.07 12:18) [22]

Ещё раз всем спасибо :)


stud   (2007-06-04 12:18:00) [4]

Slider007 ©   (04.06.07 11:52) [17]
Подскажи пожалуйста как условие where написать если есть дата из месяца, чтоб охватить весь месяц ?

where extract(month,data_field)=m and extract(yaer,data_field)=y


Desdechado   (2007-06-04 12:16:00) [5]

Slider007 ©   (04.06.07 11:12) [9]
Через UDF. Или PSQL (навскидку) циклом WHILE. Вычитать (прибавлять) по одному дню, пока месяц не изменится. Почему циклом? Чтоб проблему перехода через 1 января решить и не заниматься конструированием из строк (слишком формато-зависимое).


Slider007   (2007-06-04 12:09:00) [6]

sniknik ©   (04.06.07 11:56) [18]
Ничего не понимаю, толи у меня глюк был, толи база глюкнула, толи IBExpert. Удалил старую процедуру [10].
Написал заново ТО ЖЕ САМОЕ. Всё заработало.
Спасибо большое за помощь.


sniknik   (2007-06-04 12:00:00) [7]

> returns (
>   dt integer)

> dt = CAST( y||'-'||m||'-'||d AS DATE);


sniknik   (2007-06-04 11:56:00) [8]

> дают одну и ту же ошибку.
попробуй подставь явно

CAST('2007-08-05' AS DATE);
CAST('2007/08/05' AS DATE);
CAST('2007.08.05' AS DATE);
CAST('05/08/2007' AS DATE);
CAST('05.08.2007' AS DATE);
и т.д.

везде  ошибки? одинаковые?


Slider007   (2007-06-04 11:52:00) [9]

stud ©   (04.06.07 11:44) [15]
Подскажи пожалуйста как условие where написать если есть дата из месяца, чтоб охватить весь месяц ?


Slider007   (2007-06-04 11:51:00) [10]

sniknik ©   (04.06.07 11:43) [14]
строка "2007-08-05" ну никак не может получится из обьеденения d||'.'||m||'.'||y


Тем не менее получается.
dt = CAST( y||'-'||m||'-'||d AS DATE);
и
dt = CAST( d||'.'||m||'.'||y AS DATE);
дают одну и ту же ошибку.


stud   (2007-06-04 11:44:00) [11]

а нафига первый и последний день??? есть же месяц и год.
и все, что еще надо чтобы получить данные за месяц??


sniknik   (2007-06-04 11:43:00) [12]

> conversion error from string "2007-08-05".
это ошибка на
> dt = CAST( y||'-'||m||'-'||d AS DATE);
строка "2007-08-05" ну никак не может получится из обьеденения d||'.'||m||'.'||y


Slider007   (2007-06-04 11:35:00) [13]

Johnmen ©   (04.06.07 11:29) [12]
Какая ошибка на CAST( d||'.'||m||'.'||y AS DATE)?


Error Message:
----------------------------------------
Overflow occurred during data type conversion.
conversion error from string "2007-08-05".

Выполняю в IBExpert


Johnmen   (2007-06-04 11:29:00) [14]

Какая ошибка на CAST( d||'.'||m||'.'||y AS DATE)?


Slider007   (2007-06-04 11:18:00) [15]

Slider007 ©   (04.06.07 11:18) [10]
Пишу ессесно:
SELECT dt from CALC_DATE


Slider007   (2007-06-04 11:18:00) [16]

Пишу:
SET TERM ^ ;

CREATE PROCEDURE CALC_DATE
returns (
   dt integer)
as
declare variable d integer;
declare variable m integer;
declare variable y integer;
begin

 d = 05;
 m = 08;
 y = 2007;

 dt = CAST( y||'-'||m||'-'||d AS DATE);
 /*или dt = CAST( d||'.'||m||'.'||y AS DATE);*/

 suspend;
end^

SET TERM ; ^

GRANT EXECUTE ON PROCEDURE CALC_DATE TO SYSDBA;


Отвечает:
Overflow occurred during data type conversion.
conversion error from string "2007-08-05"

Где грабли притаились ?


Slider007   (2007-06-04 11:12:00) [17]

Desdechado ©   (04.06.07 10:59) [8]
Хотя я бы предпочел вычислять первый и последний день месяца из переданной нормальной даты.


КАК ??? О:)


Desdechado   (2007-06-04 10:59:00) [18]

Johnmen ©   (04.06.07 09:09) [4]
Лучше в обратном порядке и через дефис.

Хотя я бы предпочел вычислять первый и последний день месяца из переданной нормальной даты.


Deniz   (2007-06-04 10:25:00) [19]


> На сайте ibase.ru скачал библиотеку udf, с помощью которой разодрал дату на d,m,y.

Так есть же extract в FireBird 1.5, т.е.:
Extract(day/month/year from DateTimeField)


Slider007   (2007-06-04 09:31:00) [20]

Johnmen ©   (04.06.07 9:09) [4]
Ага, спасибо, кажется то что нужно. Буду пробовать.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо