pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: A. Kretschmer <andreas.kretschmer@schollglas.com>
To: pgsql-sql@postgresql.org
Subject: Re: extracting words
Date: Wed, 23 Apr 2008 07:18:44 +0200
Message-ID: <20080423051842.GA8401@a-kretschmer.de> (raw)
In-Reply-To: <20080422222504.56bdb06d@dick.coachhouse>
References: <20080422222504.56bdb06d@dick.coachhouse>

am  Tue, dem 22.04.2008, um 22:25:04 +0100 mailte Tarlika Elisabeth Schmitz folgendes:
> I am not quite sure whether this would be sensible or indeed at
> all possible to do in SQL:
> 
> TABLE product: product_pk,  product_name, department_fk
> TABLE product: department_pk,  department_name
> 
> example data:
> 
> SELECT product_pk, department_name, product_name ... LEFT JOIN ...:
> 
> 1, "cakes & desserts", "apple crumble"
> 2, "cakes & desserts", "cheese cake"
> 3, "starters & soups", "french onion soup"
> 
> 
> I need to extract the words from department_name and product_name
> (words are separated by spaces) and get something like:
> 
> 1 cakes
> 1 desserts
> 1 apple
> 1 crumble
> 2 cakes
> 2 desserts
> 2 cheese
> 2 cake
> 3 starters
> 3 soups
> 3 french
> 3 onion
> 3 soup
> 

A little function (author: David Fetter)

-- split a string to rows, by David Fetter
CREATE OR REPLACE FUNCTION split_to_rows(TEXT, TEXT) RETURNS SETOF TEXT
STRICT
LANGUAGE sql
AS $$
    SELECT (string_to_array($1, $2))[s.i]
    FROM generate_series(
        1,
        array_upper(string_to_array($1, $2), 1)
    ) AS s(i);
$$;


And now:

test=*# select * from product ;
 id |       val1       |       val2
----+------------------+-------------------
  1 | cakes & desserts | apple crumble
  2 | cakes & desserts | cheese cake
  3 | starters & soups | french onion soup
(3 rows)

test=*# select id, split_to_rows(replace(val1 || ' ' || val2,' &',''),' ') as col1 from product;
 id |   col1
----+----------
  1 | cakes
  1 | desserts
  1 | apple
  1 | crumble
  2 | cakes
  2 | desserts
  2 | cheese
  2 | cake
  3 | starters
  3 | soups
  3 | french
  3 | onion
  3 | soup
(13 rows)



HTH, Andreas
-- 
Andreas Kretschmer
Kontakt:  Heynitz: 035242/47150,   D1: 0160/7141639 (mehr: -> Header)
GnuPG-ID:   0x3FFF606C, privat 0x7F4584DA   http://wwwkeys.de.pgp.net



view thread (5+ messages)  latest in thread

Message-ID: <20080423051842.GA8401@a-kretschmer.de>
Permalink:  ../20080423051842.GA8401@a-kretschmer.de/
Also on:    postgresql.org/message-id/20080423051842.GA8401@a-kretschmer.de

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: andreas.kretschmer@schollglas.com
  Subject: Re: extracting words
  In-Reply-To: <20080423051842.GA8401@a-kretschmer.de>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox