Обсуждение: Natural ordering in postgresql? Does it exist?
Hi all, I have a field that I'll be ordering and I noticed that ordering is done logically and would confuse my users here (1,12,16,4,8, etc). I'm writing an application in PHP that connects to Postgres and while I know that PHP has some powerful natural ordering functions it would be much easier if I could just use something from postgres directly. Does there exist any way to order naturally? Thanks, Clark Endrizzi _________________________________________________________________ Is your PC infected? Get a FREE online computer virus scan from McAfee� Security. http://clinic.mcafee.com/clinic/ibuy/campaign.asp?cid=3963
Quoth clarkendrizzi@hotmail.com ("Clark Endrizzi"):
> I have a field that I'll be ordering and I noticed that ordering is
> done logically and would confuse my users here (1,12,16,4,8, etc).
>
> I'm writing an application in PHP that connects to Postgres and while
> I know that PHP has some powerful natural ordering functions it would
> be much easier if I could just use something from postgres directly.
> Does there exist any way to order naturally?
If you wish to impose an ordering on an SQL query, you must specify
that ordering using an "ORDER BY" clause.
That's not a PostgreSQL issue; that's how SQL works.
--
output = ("cbbrowne" "@" "gmail.com")
http://linuxfinances.info/info/linux.html
Rules of the Evil Overlord #204. "I will hire an entire squad of blind
guards. Not only is this in keeping with my status as an equal
opportunity employer, but it will come in handy when the hero becomes
invisible or douses my only light source."
<http://www.eviloverlord.com/>
On Fri, Dec 10, 2004 at 02:47:53PM -0700, Clark Endrizzi wrote:
> I have a field that I'll be ordering and I noticed that ordering is done
> logically and would confuse my users here (1,12,16,4,8, etc).
I think you mean that the ordering is done lexically and you want
it done numerically. If the fields are entirely numeric then storing
them using one of the numeric types (INTEGER, NUMERIC, DOUBLE
PRECISION, etc.) will result in numeric sort orders. If you have
all-numeric values in VARCHAR/TEXT fields, then you can cast them
to one of the numeric types in the ORDER BY clause:
SELECT ...
ORDER BY fieldname::INTEGER;
If the values are a mixture of text and numbers (e.g., ABC-1, ABC-12,
etc.) then you could use string functions to order different parts
of the field differently:
SELECT ...
ORDER BY SUBSTRING(fieldname, 1, 3),
SUBSTRING(fieldname, 5)::INTEGER;
SELECT ...
ORDER BY SUBSTRING(fieldname FROM '^(\\w+)'),
SUBSTRING(fieldname FROM '(\\d+)')::INTEGER;
--
Michael Fuhr
http://www.fuhr.org/~mfuhr/
Numbers as text are ordered like that. Integers are ordered as you would like. The best hack I have seen if you are stuck with text is ...order by length(numbers_as_test), numbers_as_text which sorts first by number of "digits" then by text order. Ian Harding Programmer/Analyst II Tacoma-Pierce County Health Department iharding@tpchd.org Phone: (253) 798-3549 Pager: (253) 754-0002 >>> "Clark Endrizzi" <clarkendrizzi@hotmail.com> 12/10/04 1:47 PM >>> Hi all, I have a field that I'll be ordering and I noticed that ordering is done logically and would confuse my users here (1,12,16,4,8, etc). I'm writing an application in PHP that connects to Postgres and while I know that PHP has some powerful natural ordering functions it would be much easier if I could just use something from postgres directly. Does there exist any way to order naturally? Thanks, Clark Endrizzi _________________________________________________________________ Is your PC infected? Get a FREE online computer virus scan from McAfee® Security. http://clinic.mcafee.com/clinic/ibuy/campaign.asp?cid=3963 ---------------------------(end of broadcast)--------------------------- TIP 7: don't forget to increase your free space map settings
"Clark Endrizzi" <clarkendrizzi@hotmail.com> writes: > Hi all, > I have a field that I'll be ordering and I noticed that ordering is > done logically and would confuse my users here (1,12,16,4,8, etc). Sounds like you're storing a number in a text field. Numeric fields sort in numerical order. -Doug