Received: from jupiter.jw.home (p3E9EB266.dip.t-dialin.net [62.158.178.102]) by hub.org (8.10.1/8.10.1) with ESMTP id e7ULumC63217; Wed, 30 Aug 2000 17:56:48 -0400 (EDT) Received: (from janwieck@localhost) by jupiter.jw.home (8.9.3/8.9.3) id RAA06005; Wed, 30 Aug 2000 17:14:10 -0500 From: Jan Wieck Message-Id: <200008302214.RAA06005@jupiter.jw.home> Subject: Re: function In-Reply-To: <078001c0129a$a2354ec0$1708050a@mt.lv> from Normunds at "Aug 30, 2000 05:54:51 pm" To: Normunds Date: Wed, 30 Aug 2000 17:14:10 -0500 (EST) CC: pgsql-general@postgresql.org, pgsql-sql@postgresql.org X-Mailer: ELM [version 2.4ME+ PL68 (25)] MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Archive-Number: 200008/768 Normunds wrote: > Hi all, > > how can I write function which takes text from one field, replaces > some characters and puts it in other field? I have array with old and > new values. > > For example: > old array = {'r', 'Z', 'o'} > new array = {'s', 'm', 't'} > old field value = 'Zorro' > new field value which must calculate this function = 'mtsst' > > This function will be used in update trigger. > Any ideas? Tcl has a "map" functionality as subcommand of "string". I think it appeared in version 8.1. To use the example below, your Tcl installation must be 8.1 or newer when rebuilding PostgreSQL configured with "--with-tcl" and enable PL/Tcl with "createlang". CREATE FUNCTION string_map(text, text) RETURNS text AS ' return [string map $2 $1] ' LANGUAGE 'pltcl'; CREATE SELECT string_map('Zorro', 'r s Z m o t'); string_map ------------ mtsst (1 row) As you see, the old and new arrays are both coded into the second argument. It is a key, value pair list, with usual Tcl quoting for lists. Can you convert your arrays to that? Jan -- #======================================================================# # It's easier to get forgiveness for being wrong than for being right. # # Let's break this rule - forgive me. # #================================================== JanWieck@Yahoo.com #