[GENERAL] split to table by space

2010-01-02 Thread Jamie Kahgee
I need a function like regexp_split_to_table where I can split a string to a
table by a space delimiter.

so:

Please Help Me

would convert to:

Please
Help
Me

However I'm stuck working w/ version 8.2.9, so I don't have the
regexp_split_to_table function. Is there any good functions that can handle
this in my version that I am unaware of?  Or does anyone know how to write
an easy function to handle this in in plpgsql or something?

Thanks,
Jamie K.


Re: [GENERAL] split to table by space

2010-01-02 Thread Brian Modra
2010/1/3 Jamie Kahgee jamie.kah...@gmail.com:
 I need a function like regexp_split_to_table where I can split a string to a
 table by a space delimiter.
 so:
 Please Help Me
 would convert to:
 Please
 Help
 Me
 However I'm stuck working w/ version 8.2.9, so I don't have the
 regexp_split_to_table function. Is there any good functions that can handle
 this in my version that I am unaware of?  Or does anyone know how to write
 an easy function to handle this in in plpgsql or something?

I wrote one a while ago... I'll paste it below. Its not exactly
optimised, but you are welcome:

CREATE OR REPLACE FUNCTION getWords(inv text)
 RETURNS text[] AS $$
DECLARE
 temp text;
 i integer;
 len integer;
 ch character(1);
 outv text[] := '{}';
 outlen integer := 0;
 i1 integer := 0;
BEGIN
 temp := trim(both ' ' from inv);
 len  := char_length(temp);
 i:= 1;
 while i = len loop
  while i = len loop
   ch  := cast(substring(temp from i for 1) as character(1));
   exit when ch = ' ' or ch = ',' or ch = '.' or ch = '-';
   i := i + 1;
  end loop;

  exit when i = i1;

  outv[outlen] := substring(temp from i1 for (i - i1));
  outlen := outlen + 1;

  while i = len loop
   ch  := cast(substring(temp from i for 1) as character(1));
   exit when ch != ' ' and ch != ',' and ch != '.' and ch != '-';
   i := i + 1;
  end loop;
  i1 := i;
 end loop;
 return outv;
END;
$$ LANGUAGE plpgsql;


-- 
Brian Modra   Land line: +27 23 5411 462
Mobile: +27 79 69 77 082
5 Jan Louw Str, Prince Albert, 6930
Postal: P.O. Box 2, Prince Albert 6930
South Africa
http://www.zwartberg.com/

-- 
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


Re: [GENERAL] split to table by space

2010-01-02 Thread Allan Kamau
On Sun, Jan 3, 2010 at 9:30 AM, Brian Modra epai...@googlemail.com wrote:
 2010/1/3 Jamie Kahgee jamie.kah...@gmail.com:
 I need a function like regexp_split_to_table where I can split a string to a
 table by a space delimiter.
 so:
 Please Help Me
 would convert to:
 Please
 Help
 Me
 However I'm stuck working w/ version 8.2.9, so I don't have the
 regexp_split_to_table function. Is there any good functions that can handle
 this in my version that I am unaware of?  Or does anyone know how to write
 an easy function to handle this in in plpgsql or something?

 I wrote one a while ago... I'll paste it below. Its not exactly
 optimised, but you are welcome:

 CREATE OR REPLACE FUNCTION getWords(inv text)
  RETURNS text[] AS $$
 DECLARE
  temp text;
  i integer;
  len integer;
  ch character(1);
  outv text[] := '{}';
  outlen integer := 0;
  i1 integer := 0;
 BEGIN
  temp := trim(both ' ' from inv);
  len  := char_length(temp);
  i    := 1;
  while i = len loop
  while i = len loop
   ch  := cast(substring(temp from i for 1) as character(1));
   exit when ch = ' ' or ch = ',' or ch = '.' or ch = '-';
   i := i + 1;
  end loop;

  exit when i = i1;

  outv[outlen] := substring(temp from i1 for (i - i1));
  outlen := outlen + 1;

  while i = len loop
   ch  := cast(substring(temp from i for 1) as character(1));
   exit when ch != ' ' and ch != ',' and ch != '.' and ch != '-';
   i := i + 1;
  end loop;
  i1 := i;
  end loop;
  return outv;
 END;
 $$ LANGUAGE plpgsql;


 --
 Brian Modra   Land line: +27 23 5411 462
 Mobile: +27 79 69 77 082
 5 Jan Louw Str, Prince Albert, 6930
 Postal: P.O. Box 2, Prince Albert 6930
 South Africa
 http://www.zwartberg.com/

 --
 Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
 To make changes to your subscription:
 http://www.postgresql.org/mailpref/pgsql-general


A peek into the extremely helpful official PG documentation
(http://www.postgresql.org/docs/8.4/interactive/functions-matching.html#FUNCTIONS-POSIX-REGEXP;)
yields the example below.


SELECT foo FROM regexp_split_to_table('the quick brown fox jumped over
the lazy dog', E'\\s+') AS foo;
  foo

 the
 quick
 brown
 fox
 jumped
 over
 the
 lazy
 dog
(9 rows)


Allan

-- 
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


Re: [GENERAL] split to table by space

2010-01-02 Thread Allan Kamau
On Sun, Jan 3, 2010 at 9:37 AM, Allan Kamau kamaual...@gmail.com wrote:
 On Sun, Jan 3, 2010 at 9:30 AM, Brian Modra epai...@googlemail.com wrote:
 2010/1/3 Jamie Kahgee jamie.kah...@gmail.com:
 I need a function like regexp_split_to_table where I can split a string to a
 table by a space delimiter.
 so:
 Please Help Me
 would convert to:
 Please
 Help
 Me
 However I'm stuck working w/ version 8.2.9, so I don't have the
 regexp_split_to_table function. Is there any good functions that can handle
 this in my version that I am unaware of?  Or does anyone know how to write
 an easy function to handle this in in plpgsql or something?

 I wrote one a while ago... I'll paste it below. Its not exactly
 optimised, but you are welcome:

 CREATE OR REPLACE FUNCTION getWords(inv text)
  RETURNS text[] AS $$
 DECLARE
  temp text;
  i integer;
  len integer;
  ch character(1);
  outv text[] := '{}';
  outlen integer := 0;
  i1 integer := 0;
 BEGIN
  temp := trim(both ' ' from inv);
  len  := char_length(temp);
  i    := 1;
  while i = len loop
  while i = len loop
   ch  := cast(substring(temp from i for 1) as character(1));
   exit when ch = ' ' or ch = ',' or ch = '.' or ch = '-';
   i := i + 1;
  end loop;

  exit when i = i1;

  outv[outlen] := substring(temp from i1 for (i - i1));
  outlen := outlen + 1;

  while i = len loop
   ch  := cast(substring(temp from i for 1) as character(1));
   exit when ch != ' ' and ch != ',' and ch != '.' and ch != '-';
   i := i + 1;
  end loop;
  i1 := i;
  end loop;
  return outv;
 END;
 $$ LANGUAGE plpgsql;


 --
 Brian Modra   Land line: +27 23 5411 462
 Mobile: +27 79 69 77 082
 5 Jan Louw Str, Prince Albert, 6930
 Postal: P.O. Box 2, Prince Albert 6930
 South Africa
 http://www.zwartberg.com/

 --
 Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
 To make changes to your subscription:
 http://www.postgresql.org/mailpref/pgsql-general


 A peek into the extremely helpful official PG documentation
 (http://www.postgresql.org/docs/8.4/interactive/functions-matching.html#FUNCTIONS-POSIX-REGEXP;)
 yields the example below.


 SELECT foo FROM regexp_split_to_table('the quick brown fox jumped over
 the lazy dog', E'\\s+') AS foo;
  foo
 
  the
  quick
  brown
  fox
  jumped
  over
  the
  lazy
  dog
 (9 rows)


 Allan


Sorry I miss understood Jamie's question where he is looking for a
substitute for regexp_split_to_table() function, please ignore my
previous post.

Allan.

-- 
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general