sql 排序问题

[复制链接]
查看11 | 回复7 | 2005-2-28 12:57:00 | 显示全部楼层 |阅读模式
如果a是cher类型用下列语句
select a from asa order by a
得到下列结果
1
10
11
111
12
13
2
20
21
要想使结果为
1
2
10
11
12
13
20
21
111
应该如何做?


回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
select a from asa order by length(a);
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
可以这样:
select a from asa order by length(a), a;
如果字段a 的值全部是数字的话,也可以考虑这样:
select a from asa order by to_number(a);
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
谢谢楼上的,我去试试
我是这样实现的
方法1:

create table ant as select CARDINDEXfrom t_eb_cardinf;
alter table ant add (aindex number(10));
update ant set aindex=CARDINDEX;
select CARDINDEX from ant order by aindex asc;
drop table ant;
方法2:
select CARDINDEX from t_eb_cardinf where CARDINDEX9 and CARDINDEX99 and CARDINDEX999 and CARDINDEX select * from t order by length(a);
A
----------
9
4
111
222
333

SQL> select a from t
2order by length(a),a;
A
----------
4
9
111
222
333
-----------------这应该是你要的吧(如果有0.0011小数又有新的问题)
如果都是数字就用TO_NUMBER吧
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
哦 ,会这样吗?xie3000,请问怎么改成VARCHAR?
length这个函数的功能是什么?只是字符长度吗?
它是怎么实现比较的?
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
可以这么改:
ALTER TABLE tablenameMODIFY columnnamevarchar2(10);

char和varchar2的区别(自己做试验总结的):
char(10)
: length()的结果永远是10,


当字符串的长度不足10,不可以缩减表的column的长度.

where c='a'和where c='a '有相同效果,空格被忽略
varchar2(10)
: length()的结果是字符串的实际长度,

当字符串的长度不足10,可以缩减表的column的长度.

where v='a'和where v='a ' 结果不同.
创建表时:
char column的缺省长度是1
varchar2 column的长度在表创建时必须指定

不过,不知道谁可以教一下varchar 和 varchar2 的区别?
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
SQL> DESC T;
名称
是否为空? 类型
----------------------------------------- -------- ----------------------------
A
CHAR(10)
SQL> ALTER TABLE T MODIFY A VARCHAR(11);
表已更改。
SQL> UPDATE T SET A=TRIM(A);
已更新 1 行。
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
MODIFY应该只能在表为空的时候用吧。。。
而且我忘记说了 我们是不允许改变原始表的结构
我用的时候是新建了在删除的
也可以增加一项,用完再删
呵呵真的是谢谢大家了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行