> Здравствуйте.
>
> cast(DAT as varchar(10)) дает что-то типа: '2006-11-07'
>
> Может в Америке это самое оно, но чтобы нормальным русским парням и девкам
> сильно не пугаться и в нормальный вид привести, это либо EXTRACT трижды
> вызывать надо и слипать кусочки, либо конвертацию на клиентской стороне
> производить.
> Может подумать над расширением синтаксиса, чтобы можно было бы указать
> заветные буковки 'DD.MM.YYYY'
>
> что-то типа: cast(DAT as varchar(10) like 'DD.MM.YYYY')  --like от балды
> конечно, но почему бы не так?
>
> Надеюсь я тормоз и в ответ получу "в FB2.1 всё будет в лучшем виде" :)))


create procedure FORMAT_TIMESTAMP(  -- Форматирование
даты и времени
  AMASK varchar(1000),                  -- Формат (D DD DDD DDDD
M MM MMM MMMM YY YYYY h hh m mm s ss)
  ADATETIME timestamp                   -- Форматируемое
значение
)
returns (
  RESULT varchar(1000)                  -- Результат
форматирования
)
as
declare variable i smallint;
declare variable C varchar(1);
declare variable CC varchar(2);
declare variable CCC varchar(3);
declare variable CCCC varchar(4);
declare variable S varchar(1000);
declare variable SS varchar(1000);
declare variable SSS varchar(1000);
declare variable SSSS varchar(1000);
declare variable STR varchar(1000);
declare variable LEN_SPC smallint;
declare variable D smallint;
declare variable M smallint;
declare variable Y smallint;
declare variable HR smallint;
declare variable MN smallint;
declare variable SC smallint;
declare variable W smallint;
begin
   if (:ADATETIME is not null)
      then begin
           W = extract(weekday from :ADATETIME);
           D = extract(day from :ADATETIME);
           M = extract(month from :ADATETIME);
           Y = extract(year from :ADATETIME);
           HR = extract(hour from :ADATETIME);
           MN = extract(minute from :ADATETIME);
           SC = extract(second from :ADATETIME);
           end
   i = 1;
   if (AMASK is null or AMASK = '')
      then AMASK = 'DD.MM.YYYY hh:mm';
   STR = AMASK;
   RESULT = '';
   LEN_SPC = 0;
   while (LEN_SPC < 10)
      do begin
         C = substring(:STR from 1 for 1);
         CC = substring(:STR from 1 for 2);
         CCC = substring(:STR from 1 for 3);
         CCCC = substring(:STR from 1 for 4);
         S = substring(:STR from 2 for 1000);
         SS = substring(:STR from 3 for 1000);
         SSS = substring(:STR from 4 for 1000);
         SSSS = substring(:STR from 5 for 1000);
         if (C = ' ')
            then begin
                 LEN_SPC = LEN_SPC + 1;
                 STR = S;
                 end
            else begin
                 while (LEN_SPC > 0)
                     do begin
                        RESULT = RESULT || ' ';
                        LEN_SPC = LEN_SPC - 1;
                        end
                 if (CCCC = 'DDDD' or CCCC = 'MMMM' or CCCC = 'YYYY')
                    then begin
                         if (CCCC = 'DDDD')
                            then begin
                                 if (W =  1) then RESULT = RESULT ||
'Понедельник';
                                 if (W =  2) then RESULT = RESULT ||
'Вторник';
                                 if (W =  3) then RESULT = RESULT ||
'Среда';
                                 if (W =  4) then RESULT = RESULT ||
'Четверг';
                                 if (W =  5) then RESULT = RESULT ||
'Пятница';
                                 if (W =  6) then RESULT = RESULT ||
'Суббота';
                                 if (W =  0) then RESULT = RESULT ||
'Воскресенье';
                                 end
                         if (CCCC = 'MMMM')
                            then begin
                                 if (M =  1) then RESULT = RESULT ||
'Январь';
                                 if (M =  2) then RESULT = RESULT ||
'Февраль';
                                 if (M =  3) then RESULT = RESULT ||
'Март';
                                 if (M =  4) then RESULT = RESULT ||
'Апрель';
                                 if (M =  5) then RESULT = RESULT ||
'Май';
                                 if (M =  6) then RESULT = RESULT ||
'Июнь';
                                 if (M =  7) then RESULT = RESULT ||
'Июль';
                                 if (M =  8) then RESULT = RESULT ||
'Август';
                                 if (M =  9) then RESULT = RESULT ||
'Сентябрь';
                                 if (M = 10) then RESULT = RESULT ||
'Октябрь';
                                 if (M = 11) then RESULT = RESULT ||
'Ноябрь';
                                 if (M = 12) then RESULT = RESULT ||
'Декабрь';
                                 end
                         if (CCCC = 'YYYY') then RESULT = RESULT || Y;
                         STR = SSSS;
                         end
                 else if (CCC = 'DDD' or CCC = 'MMM')
                    then begin
                         if (CCC = 'DDD')
                            then begin
                                 if (W =  1) then RESULT = RESULT ||
'пн';
                                 if (W =  2) then RESULT = RESULT ||
'вт';
                                 if (W =  3) then RESULT = RESULT ||
'ср';
                                 if (W =  4) then RESULT = RESULT ||
'чт';
                                 if (W =  5) then RESULT = RESULT ||
'пт';
                                 if (W =  6) then RESULT = RESULT ||
'сб';
                                 if (W =  0) then RESULT = RESULT ||
'вс';
                                 end
                         if (CCC = 'MMM')
                            then begin
                                 if (M =  1) then RESULT = RESULT ||
'Янв';
                                 if (M =  2) then RESULT = RESULT ||
'Фев';
                                 if (M =  3) then RESULT = RESULT ||
'Мар';
                                 if (M =  4) then RESULT = RESULT ||
'Апр';
                                 if (M =  5) then RESULT = RESULT ||
'Май';
                                 if (M =  6) then RESULT = RESULT ||
'Июн';
                                 if (M =  7) then RESULT = RESULT ||
'Июл';
                                 if (M =  8) then RESULT = RESULT ||
'Авг';
                                 if (M =  9) then RESULT = RESULT ||
'Сен';
                                 if (M = 10) then RESULT = RESULT ||
'Окт';
                                 if (M = 11) then RESULT = RESULT ||
'Ноя';
                                 if (M = 12) then RESULT = RESULT ||
'Дек';
                                 end
                         STR = SSS;
                         end
                 else if (CC = 'DD' or CC = 'MM' or CC = 'YY' or CC =
'hh' or CC = 'mm' or CC = 'ss')
                    then begin
                         if (CC = 'DD')
                            then begin
                                 if (D < 10)
                                    then RESULT = RESULT || '0' || D;
                                    else RESULT = RESULT || D;
                                 end
                         if (CC = 'MM')
                            then begin
                                 if (M < 10)
                                    then RESULT = RESULT || '0' || M;
                                    else RESULT = RESULT || M;
                                 end
                         if (CC = 'YY')
                            then RESULT = RESULT ||
substring(extract(year from :ADATETIME) from 3 for 2);
                         if (CC = 'hh')
                            then begin
                                 if (HR < 10)
                                    then RESULT = RESULT || '0' || HR;
                                    else RESULT = RESULT || HR;
                                 end
                         if (CC = 'mm')
                            then begin
                                 if (MN < 10)
                                    then RESULT = RESULT || '0' || MN;
                                    else RESULT = RESULT || MN;
                                 end
                         if (CC = 'ss')
                            then begin
                                 if (SC < 10)
                                    then RESULT = RESULT || '0' || SC;
                                    else RESULT = RESULT || SC;
                                 end
                         STR = SS;
                         end
                 else if (C = 'D' or C = 'M' or C = 'h' or C = 'm' or C
= 's')
                    then begin
                         if (C = 'D') then RESULT = RESULT || D;
                         if (C = 'M') then RESULT = RESULT || M;
                         if (C = 'h') then RESULT = RESULT || HR;
                         if (C = 'm') then RESULT = RESULT || MN;
                         if (C = 's') then RESULT = RESULT || SC;
                         STR = S;
                         end
                 else begin
                      RESULT = RESULT || C;
                      STR = S;
                      end
                 end
         i = i + 1;
         end
   suspend;
end
^

Ответить