К основному контенту

Firebird get words

Задался вопросом сохранения настроек через запятую в одном поле с последующим разбором этой строки в самом Firebird'е.
Вот что получилось. Меня устраивает. Может кому поможет.

create or alter procedure GET_WORDS (
    INSTR varchar(30000),
    DELIMITER varchar(200) = ' ')
returns (
    NUMBER integer,
    WORD varchar(30000))
as
declare variable I integer;
declare variable J integer;
begin
  NUMBER = 1;
  I = 1;
  J = position(:DELIMITER, INSTR, I);
  if (J > I) then
  begin
    WORD = substring(INSTR from I for J - I);
    while (WORD is not null) do
    begin
      if (char_length(trim(WORD)) > 0) then
      begin
        WORD = trim(WORD);
        suspend;
        NUMBER = NUMBER + 1;
      end
      I = J + char_length(DELIMITER);
      J = position(:DELIMITER, INSTR, I);
      if (J = 0) then
      begin
        J = char_length(INSTR);
        if (I < J) then
          WORD = substring(INSTR from I for J);
        else
          WORD = null;
      end
      else
        WORD = substring(INSTR from I for J - I);
    end
  end
end

Комментарии

Популярные сообщения из этого блога

Почему от кофе иногда может хотеться спать?

Кофе принято считать бодрящим напитком, который дает заряд бодрости и энергии, а также поднимает настроение. Связано это с большим содержанием кофеина в кофейных зернах. Поэтому для многих людей кофе является любимый напитком для утреннего пробуждения. Однако в некоторых случаях вместо ожидаемого прилива сил после выпитой его чашки люди чувствуют сонливость и упадок сил, что вызывает желание прилечь и вздремнуть. Причина такому обратному эффекту заключается вовсе не в какой-то исключительности организма. В большинстве случаев сонливость связана с особенностями воздействия самого кофеина. Кроме того, иногда желание поспать после кофе связан с проблемами со здоровьем. Почему после выпитого кофе мы обычно чувствуем прилив бодрости? Причина заключается в выбросе нескольких гормонов, одним из которых является кортизола. Его еще называют гормоном реакции “бей или беги”. То есть он, фактически, вызывает стресс и приводит организм в состоянии готовности к действию. К слову...

Firebird various delimiters for GET_WORDS

Использование процедуры GET_WORDS для разных разделителей можно в таком виде: select WORD from GET_WORDS((select list(WORD, ';') from GET_WORDS((select list(WORD) from GET_WORDS('12 7712 12,12;12 333556', ' ')), ',')), ';') где используются последовательно несколько разделителей ' ', ',' и ';' .