Thread: last word in text
Is there a function or composition of functions that will retrieve the last word in a text field? I have a table of addresses with arbitrary text for the first field (i.e. to whom it is addressed), and I'd like to do my queries as something like this: SELECT * from Addresses WHERE state = 'CA' ORDER BY lastword(addressee); What I'm missing is the definition/name of the lastword function. Note that I'm not expecting perfect results from this. There will be some weirdness with certain addressees. Nonetheless, it is a reasonable approach. My other option, which is what I'm doing now, is to have a "last" column in the table and have my host language fill it on insertion. It's workable, but it's redundant and overly complex from a data abstraction point of view. --Greg
create function lastword(varchar) returns varchar as ' return [string range $1 [string last " " $1] end] ' language 'pltcl'; Ian Harding Programmer/Analyst II Tacoma-Pierce County Health Department iharding@tpchd.org (253) 798-3549 >>> Gregory Seidman <gss+pg@cs.brown.edu> 01/15/03 07:16AM >>> Is there a function or composition of functions that will retrieve the last word in a text field? I have a table of addresses with arbitrary text for the first field (i.e. to whom it is addressed), and I'd like to do my queries as something like this: SELECT * from Addresses WHERE state = 'CA' ORDER BY lastword(addressee); What I'm missing is the definition/name of the lastword function. Note that I'm not expecting perfect results from this. There will be some weirdness with certain addressees. Nonetheless, it is a reasonable approach. My other option, which is what I'm doing now, is to have a "last" column in the table and have my host language fill it on insertion. It's workable, but it's redundant and overly complex from a data abstraction point of view. --Greg ---------------------------(end of broadcast)--------------------------- TIP 3: if posting/reading through Usenet, please send an appropriate subscribe-nomail command to majordomo@postgresql.org so that your message can get through to the mailing list cleanly
Ian Harding sez: } create function lastword(varchar) returns varchar as ' } return [string range $1 [string last " " $1] end] } ' language 'pltcl'; I don't seem to have pltcl available. In fact, all I have available is plpgsql and sql. Can it be done in either of those languages? } Ian Harding --Greg
I am certain it can, but you could make pltcl available (if you have the rights) by typing createlang 'pltcl' yourdatabasename at the command prompt. Ian Harding Programmer/Analyst II Tacoma-Pierce County Health Department iharding@tpchd.org (253) 798-3549 >>> Gregory Seidman <gss+pg@cs.brown.edu> 01/15/03 08:13AM >>> Ian Harding sez: } create function lastword(varchar) returns varchar as ' } return [string range $1 [string last " " $1] end] } ' language 'pltcl'; I don't seem to have pltcl available. In fact, all I have available is plpgsql and sql. Can it be done in either of those languages? } Ian Harding --Greg ---------------------------(end of broadcast)--------------------------- TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
Ian Harding sez: } I am certain it can, but you could make pltcl available (if you have } the rights) by typing } } createlang 'pltcl' yourdatabasename } } at the command prompt. I have the rights, but I don't seem to have the library. I don't think I compiled it when I configured/built postgresql in the first place. % createlang --username=postgres --pglib=/Volumes/Database/postgresql/lib 'pltcl' template0 ERROR: stat failed on file '/Volumes/Database/postgresql/lib/pltcl': No such file or directory createlang: language installation failed % } Ian Harding --Greg
On Wed, 15 Jan 2003, Gregory Seidman wrote: > Ian Harding sez: > } I am certain it can, but you could make pltcl available (if you have > } the rights) by typing > } > } createlang 'pltcl' yourdatabasename > } > } at the command prompt. > > I have the rights, but I don't seem to have the library. I don't think I > compiled it when I configured/built postgresql in the first place. > > % createlang --username=postgres --pglib=/Volumes/Database/postgresql/lib 'pltcl' template0 > ERROR: stat failed on file '/Volumes/Database/postgresql/lib/pltcl': No such file or directory > createlang: language installation failed > % select substring(rtrim(' ', a.sentence) from '\w+$') from atable a; Well at least for 7.3.x I can't remember but I presume you're still on an older production release. create function last_word ( text ) returns text as ' declare frompos integer; ostr alias for $1; begin while strpos($ostr, ' ') > 0 loop frompos := strpos($ostr, ' ') + 1; ostr := substring($ostr, $frompos); end loop; return $ostr; end; ' language 'plpgsql'; It ain't pretty, it ain't perfect and it ain't optimised but it might do as a first draft for you. -- Nigel J. Andrews