![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Даты в хранимых процедурах (FireBird 1.5)
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]
Ага, спасибо, кажется то что нужно. Буду пробовать.