Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как сделать инкремент года? / 6 сообщений из 6, страница 1 из 1
24.06.2003, 15:39
    #32190339
JohnyB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать инкремент года?
У меня такой вопрос, как в InterBase сделать инкремент года в данные типа TIMESTAMP?
Я извлёк год, месяц, день методом
extract(year from DatetimeField) as YEAR_V
extract(month from DatetimeField) as MONTH_V
extract(day from DatetimeField) as DAY_V
потом
YEAR_V = YEAR_V + 1
и теперь не знаю как собрать все данные в тип TIMESTAMP.
...
Рейтинг: 0 / 0
24.06.2003, 16:30
    #32190410
_DmG_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать инкремент года?
Сложи все (день, месяц и год) в строку (не забудь разделители для даты) и вставь ее в оператор INSERT, UPDATE
напр. для года:

Код: plaintext
strYEAR_V = CAST((YEAR_V +  1 ) AS CHAR)
...
Рейтинг: 0 / 0
24.06.2003, 17:25
    #32190494
JohnyB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать инкремент года?
у меня дата в формате "гггг.мм.дд". Я бы мог записать в этом формате ... ну а если поменяют формат, я бы не хотел бы менять код.
И еще дело в том, что мне и не надо записать в базу. Мне надо прочитать дату из базы добавить 1,2,3... года к этой дате.
Пример:
Задаю процедуре дату 2006.06.06 и я должен прочитать из базы DATAFIELD допустим значение 2000.05.25 добавить к этой дате 3 года и проверить больше или меньше
Можно в процедуре сделать как-то инкремент дате DATAFIELD ??? или как собрать заново дату?
...
Рейтинг: 0 / 0
24.06.2003, 22:12
    #32190707
Bol
Bol
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать инкремент года?
Дата в IB хранится одним определенным форматом (правда клонов развелось... может что новое есть, но вряд ли)
см. ниже - это просто ф-ии для приложения, переводящие дату в то, что есть в IB. Это было нужно для одной ерунды при использовании "like". По моему, в твоем случае достаточно собрать куски в такой же вид, а он всегда один и тот же.

Function DateToIbDate(InDateTime: TDateTime): String;
var Year, Month, Day: Word;
TMP: string;
begin
DecodeDate(InDateTime, Year, Month, Day);
if Month=1 then TMP:='-JAN-';
if Month=2 then TMP:='-FEB-';
if Month=3 then TMP:='-MAR-';
if Month=4 then TMP:='-APR-';
if Month=5 then TMP:='-MAY-';
if Month=6 then TMP:='-JUN-';
if Month=7 then TMP:='-JUL-';
if Month=8 then TMP:='-AUG-';
if Month=9 then TMP:='-SEP-';
if Month=10 then TMP:='-OCT-';
if Month=11 then TMP:='-NOV-';
if Month=12 then TMP:='-DEC-';
DateToIbDate:=IntToStr(Day)+TMP+IntToStr(Year);
end;


Function DateToIbDate_Month_and_Year(InDateTime: TDateTime): String;
var Year, Month, Day: Word;
TMP: string;
begin
DecodeDate(InDateTime, Year, Month, Day);
if Month=1 then TMP:='-JAN-';
if Month=2 then TMP:='-FEB-';
if Month=3 then TMP:='-MAR-';
if Month=4 then TMP:='-APR-';
if Month=5 then TMP:='-MAY-';
if Month=6 then TMP:='-JUN-';
if Month=7 then TMP:='-JUL-';
if Month=8 then TMP:='-AUG-';
if Month=9 then TMP:='-SEP-';
if Month=10 then TMP:='-OCT-';
if Month=11 then TMP:='-NOV-';
if Month=12 then TMP:='-DEC-';
DateToIbDate_Month_and_Year:=TMP+IntToStr(Year);
end;

Function DateToIbDate_Year(InDateTime: TDateTime): String;
var Year, Month, Day: Word;
begin
DecodeDate(InDateTime, Year, Month, Day);
DateToIbDate_Year:=IntToStr(Year);
end;

by
...
Рейтинг: 0 / 0
25.06.2003, 09:58
    #32190844
_DmG_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать инкремент года?
extract(year from DatetimeField) as YEAR_V
extract(month from DatetimeField) as MONTH_V
extract(day from DatetimeField) as DAY_V
потом
YEAR_V = YEAR_V + 1
потом

Код: plaintext
NewDate=CAST((CAST(YEAR_V AS CHAR) || '.' || (CAST(MONTH_V AS CHAR) || '.' || (CAST(DAY_V AS CHAR)) AS DATE)


Сам не пробовал, но получить дату возможно таким способом. Если хочешь TIMESTAMP, то дополняешь строку временем и меняешь DATE на TIMESTAMP.

Результат: вводим 2000.05.25, добавляем 1 год (YEAR_V = YEAR_V + 1) и формируем строку '2001.05.25', которую затем приводим к типу DATE (только не уверен насчет форматов - обычно дд.мм.гггг для России - тогда переверни строку к нужному формату)
...
Рейтинг: 0 / 0
25.06.2003, 10:22
    #32190876
JohnyB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать инкремент года?
Спасибо ребята я уже сделал. Я не знал как работает функция CAST .
А для тех кто еще заинтересует этот вопрос кидаю код. И к стати он работает для любого формата даты, поскольку формат даты INTERBASE не в зависимости от формата системы.
(Процедура инкрементирует год с заданном значением)
Код: plaintext
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.
CREATE PROCEDURE INC_YEAR (
    IN_DATE TIMESTAMP,
    CNT SMALLINT)
RETURNS (
    OUT_DATE TIMESTAMP)
AS
declare variable YEAR_VAL smallint;
declare variable MONTH_VAL smallint;
declare variable DAY_VAL smallint;
declare variable sMONTH_VAL VARCHAR( 5 );
BEGIN
  YEAR_VAL = extract(year from :IN_DATE);
  MONTH_VAL = extract(month from :IN_DATE);
  DAY_VAL = extract(day from :IN_DATE);

  if (MONTH_VAL= 1 ) then sMONTH_VAL='-JAN-';
  if (MONTH_VAL= 2 ) then sMONTH_VAL='-FEB-';
  if (MONTH_VAL= 3 ) then sMONTH_VAL='-MAR-';
  if (MONTH_VAL= 4 ) then sMONTH_VAL='-APR-';
  if (MONTH_VAL= 5 ) then sMONTH_VAL='-MAY-';
  if (MONTH_VAL= 6 ) then sMONTH_VAL='-JUN-';
  if (MONTH_VAL= 7 ) then sMONTH_VAL='-JUL-';
  if (MONTH_VAL= 8 ) then sMONTH_VAL='-AUG-';
  if (MONTH_VAL= 9 ) then sMONTH_VAL='-SEP-';
  if (MONTH_VAL= 10 ) then sMONTH_VAL='-OCT-';
  if (MONTH_VAL= 11 ) then sMONTH_VAL='-NOV-';
  if (MONTH_VAL= 12 ) then sMONTH_VAL='-DEC-';

  YEAR_VAL = YEAR_VAL + CNT;
  
  OUT_DATE = cast(DAY_VAL||sMONTH_VAL||YEAR_VAL AS TIMEStAMP);
END
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как сделать инкремент года? / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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