Hi. In a table that includes these columns: my_db=> \d tbl_client ... name_last | character varying(40) | not null name_first | character varying(30) | not null ...
I am extremely puzzled by the sorting of the "CLARKE"s in this list: my_db=> SELECT name_last,length(name_last),name_last='CLARK' AS clark,name_last='CLARKE' AS clarke FROM tbl_client WHERE name_last ILIKE 'CLARK%' OR name_last ILIKE 'ADAMS%' ORDER BY name_last || ', ' || name_first; name_last | length | clark | clarke -----------+--------+-------+-------- ADAMS | 5 | f | f ADAMS | 5 | f | f ADAMS | 5 | f | f ADAMS | 5 | f | f ADAMS | 5 | f | f ADAMS | 5 | f | f ADAMSON | 7 | f | f CLARK | 5 | t | f CLARK | 5 | t | f CLARKE | 6 | f | t CLARKE | 6 | f | t CLARKE | 6 | f | t CLARK | 5 | t | f CLARK | 5 | t | f CLARK | 5 | t | f CLARK | 5 | t | f CLARK | 5 | t | f (17 rows) The ADAMS are included just to show a similar example is ordering correctly. I put the length and equality test columns in to try to make sure there weren't some bizarre characters in the data. This is only happening on one particular database. I did a reindex on the table just for good measure. If I remove the name_first piece of the ORDER BY (which doesn't seem like it should matter), it sorts as expected: my_db=> SELECT name_last,length(name_last),name_last='CLARK' AS clark,name_last='CLARKE' AS clarke FROM tbl_client WHERE name_last ILIKE 'CLARK%' OR name_last ILIKE 'ADAMS%' ORDER BY name_last || ', ' ; name_last | length | clark | clarke -----------+--------+-------+-------- ADAMS | 5 | f | f ADAMS | 5 | f | f ADAMS | 5 | f | f ADAMS | 5 | f | f ADAMS | 5 | f | f ADAMS | 5 | f | f ADAMSON | 7 | f | f CLARK | 5 | t | f CLARK | 5 | t | f CLARK | 5 | t | f CLARK | 5 | t | f CLARK | 5 | t | f CLARK | 5 | t | f CLARK | 5 | t | f CLARKE | 6 | f | t CLARKE | 6 | f | t CLARKE | 6 | f | t (17 rows) I tried selecting those 17 rows from tbl_client into a new table, and get the same odd behavior. However, if I run with new data I get an expected order: CREATE TEMP TABLE test ( name_first VARCHAR(40), name_last VARCHAR(30) ); INSERT INTO test VALUES ('JOE','CLARKE'),('BILL','CLARK'); SELECT * FROM test ORDER BY name_last; SELECT * FROM test ORDER BY name_last || ', ' || name_first; Any thoughts about what's going on, what to do about it, or what obvious point I missing? Thanks in advance! my_db=> SELECT version(); version ---------------------------------------------------------------------------------------------------------------- PostgreSQL 9.2.13 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11), 64-bit (1 row) Ken -- AGENCY Software A Free Software data system By and for non-profits *http://agency-software.org/ <http://agency-software.org/>* *https://agency-software.org/demo/client <https://agency-software.org/demo/client>* ken.tan...@agency-software.org (253) 245-3801 Subscribe to the mailing list <agency-general-requ...@lists.sourceforge.net?body=subscribe> to learn more about AGENCY or follow the discussion.