Received: from localhost (unknown [200.46.208.211]) by mail.postgresql.org (Postfix) with ESMTP id 26CE2633A97 for ; Sat, 5 Sep 2009 01:28:05 -0300 (ADT) Received: from mail.postgresql.org ([200.46.204.86]) by localhost (mx1.hub.org [200.46.208.211]) (amavisd-maia, port 10024) with ESMTP id 21470-10 for ; Sat, 5 Sep 2009 04:27:52 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from images.kandalaya.org (etc.kandalaya.org [83.143.86.98]) by mail.postgresql.org (Postfix) with ESMTP id 7E6736337EC for ; Sat, 5 Sep 2009 01:27:53 -0300 (ADT) Received: from mail.linux-delhi.org (ABTS-North-Dynamic-115.220.163.122.airtelbroadband.in [122.163.220.115] (may be forged)) by images.kandalaya.org (8.14.3/8.14.3/Debian-9) with ESMTP id n854Rl28021545 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Sat, 5 Sep 2009 09:57:50 +0530 Received: from mail.linux-delhi.org (localhost [127.0.0.1]) by mail.linux-delhi.org (8.14.3/8.14.3/Debian-9) with ESMTP id n854Re2B028669 for ; Sat, 5 Sep 2009 09:57:41 +0530 From: Raj Mathur Reply-To: raju@linux-delhi.org Organization: Kandalaya To: pgsql-sql@postgresql.org Subject: Re: Substring Date: Sat, 5 Sep 2009 09:57:40 +0530 User-Agent: KMail/1.11.4 (Linux/2.6.30-1-686; KDE/4.2.4; i686; ; ) References: <15318.85292.qm@web53905.mail.re2.yahoo.com> <200909050802.10371.raju@linux-delhi.org> <4AA1E4C9.1000108@sympatico.ca> In-Reply-To: <4AA1E4C9.1000108@sympatico.ca> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200909050957.40591.raju@linux-delhi.org> X-Virus-Scanned: clamav-milter 0.95.2 at images.kandalaya.org X-Virus-Status: Clean X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=-1.11 tagged_above=-10 required=5 tests=BAYES_05=-1.11 X-Spam-Level: X-Archive-Number: 200909/30 X-Sequence-Number: 33095 On Saturday 05 Sep 2009, Frank Bax wrote: > Raj Mathur wrote: > > On Saturday 05 Sep 2009, bilal ghayyad wrote: > >> I have an sql script function that take one text parameter "funct > >> (text)", what I need to do is the following: > >> > >> If the parameter name is string and its value was for example > >> "abcd" then I need to do a query based on ab and then based on the > >> abc, how? > >> > >> Example: > >> > >> SELECT * from voipdb where prefix like string > >> > >> But I need the string to be ab and then to be abc? How I can > >> assign the string to the first character and then to the first and > >> second? In other words, how can I can take part of the string to > >> do query on it? > > > > From your example the following brute-force method should work (not > > tested): > > > > select * from voipdb where prefix like substring(string from 1 for > > 2) || '%' or prefix like substring(string from 1 for 3) || '%'; > > > > However, I don't understand why you'd want to search for both 'ab' > > and 'abc' in the same query, since the first condition is a > > superset of the second one. > > Given that tablename is "voipdb"; I wonder if OP really wants to > write a query that finds the row where argument to function matches > the most number of leading characters in "prefix". > > If voipdb table contains: ab, abc, def, defg; then calling function > with "abc" or "abcd" returns "abc" and calling function with "defh" > returns "def". > > If this is the real problem to be solved; then brute force is one > solution; but I'm left wondering if a single query might return > desired result (a single row). Something like this may help in that case (note, we're completely in the realm of creating imaginary problems and solving them now :) select * from voipdb where prefix <= string order by prefix desc limit 1; Regards, -- Raju -- Raj Mathur raju@kandalaya.org http://kandalaya.org/ GPG: 78D4 FC67 367F 40E2 0DD5 0FEF C968 D0EF CC68 D17F PsyTrance & Chill: http://schizoid.in/ || It is the mind that moves