Oracle WHERE条件和排序(三)
I('A')
-------------------
97
在ORACLE中,如果你想显示什么内容,可以像上面那样FROM DUAL。
从上面的结果看到,a(小写a)的ASCII码是97。我们可以再试一下,大写A的ASCII码是65。如果现在小写a 与 A排序,升序的话,肯定是大写A在前。 www.2cto.com
如果字符串长度不相同,该怎么比大小。比如’abc’和’ABCD’,像这样的情况,一般的规则是逐个字符比较,先比第一个字符,如果可以区分出大小,就不再往后比了。也就是说,不论长度。像上面,虽然‘ABCD’有四个字节,但它比’abc’小。因为第一个字符就分出来大小了’a’ 比‘A’大,后面的就不用比了。甚至’a’ 和‘ABCD’比较,也是’a’大而’ABCD’小。但是,’abc’ 和‘abcd’比较,就是’abcd’大了。因为前三个字符一样,分不出大小,因此,这时就看长度了,谁长谁就大。
汉字也一样,字母按照ASCII码,汉字也有编码,如果想看汉字的编号,可以使用如下命令:
gyj@OCM> select dump('郭'),dump('一'),dump('军') from dual;
DUMP('郭') DUMP('一') DUMP('军')
--------------------- --------------------- ---------------------
Typ=96 Len=2: 185,249 Typ=96 Len=2: 210,187 Typ=96 Len=2: 190,252
郭: 185,249 一: 210,187 军:190,252
这四个字当中,郭最小。其次是军、一
其实汉字的顺序,基本是按照汉语拼音的顺序比较。
(3)空值:这个是ORACLE中规定好的:升序排序时显示在最后,降序排序时显示在最前面。 www.2cto.com
3.列别名:
如果列有列名,在排序时可以使用列原来的名字,也可以使用列的别名:
gyj@OCM> select id,name,salary sal from t1 order by salary,id;(SALARY别名为SAL,这时使用列原名)
ID NAME SAL
---------- ---------- ----------
2 gyj2 8000
3 gyj3 10000
1 gyj1 12000
5 gyj5 12000
6 gyj6 12000
7 gyj7 12000
4 gyj4 15000
gyj@OCM> select id,name,salary sal from t1 order by sal,id; (此处使用列别名)
ID NAME SAL
---------- ---------- ----------
2 gyj2 8000
3 gyj3 10000
1 gyj1 12000
5 gyj5 12000
6 gyj6 12000
7 gyj7 12000
4 gyj4 15000
gyj@OCM> select id,name,salary sal from t1 order by 3,1;(3和1代表啥知道不?)
ID NAME SAL
---------- ---------- ----------
2 gyj2 8000
3 gyj3 10000
1 gyj1 12000
5 gyj5 12000
6 gyj6 12000
7 gyj7 12000
4 gyj4 15000