Thread: lower/upper functions and strings in searches
I am obviuously doing some newbie trick, and I ordinarily would spend time browing the archives, but the archives.postgresql.orgsite seems to be absurdly slow. This is 7.3.3 on a linux box. I have a bunch of data with state, city, county and country names. When our application does a search for an exact match: select * from gx_geotowns where l_state = 'NM'; I get back a lot of rows of cities in New Mexico, as expected. If I try: select * from gx_geotowns where upper(l_state) = upper('nm'); I get back: ---------+-----------+----------+------------+------+------ (0 rows) I've used other databases in which a similar statement worked as exepected: select * from clientswhere upper(client_name) = upper("Some client or otheR"); And it finds the row(s) in question ... I just know I'm overlooking some real obvious thing but for some reason this eludes me. I could see if the search was veryslow (the function returns type "text" and the indexed columns are of type CHAR(). If someone could offer help I would appreciate it, Thanks, Greg Williamson DBA GlobeXplorer LLC
On Thu, 14 Aug 2003, Gregory S. Williamson wrote: > I am obviuously doing some newbie trick, and I ordinarily would spend time browing the archives, but the archives.postgresql.orgsite seems to be absurdly slow. > > This is 7.3.3 on a linux box. > > I have a bunch of data with state, city, county and country names. When our application does a search for an exact match: > > select * from gx_geotowns where l_state = 'NM'; > I get back a lot of rows of cities in New Mexico, as expected. > > If I try: > > select * from gx_geotowns where upper(l_state) = upper('nm'); You say the column is of type CHAR(), but CHAR(2) or something else? For 7.3 and earlier, you're going to get a text comparison which means that trailing spaces are significant (it's effectively no pad in text vs pad space in char).
Gregory, > I just know I'm overlooking some real obvious thing but for some reason this eludes me. I could see if the search was very slow (the function returns type "text" and the indexed columns are of type CHAR(). Char(what?) ? if it's, say CHAR(4) that could be your problem; 'NM'::undefined == 'NM '::CHAR but 'NM'::TEXT != 'NM '::CHAR so casting everything to the desired type should fix the problem. and why are you using CHAR, anyway? -- -Josh BerkusAglio Database SolutionsSan Francisco