在Oracle中按不同类型的多个列排序?

时间:2012-09-26 11:55:52

标签: sql oracle

我是Oracle的新手。在SQLite,PostgreSQL或MSSQL中,我可以执行以下查询:

SELECT * FROM users ORDER BY id, email

以下是USERS的定义:

CREATE TABLE "USERS" (
 "ID" NUMBER(38,0) NOT NULL,
 "EMAIL" VARCHAR2(255)
)

ID为NUMBER类型,电子邮件为VARCHAR类型。

当我在Oracle中运行上述SELECT查询时,它将引发错误:

ORA-00932: inconsistent datatypes: expected - got CLOB

有没有在Oracle中这样做?

感谢您的关注。

3 个答案:

答案 0 :(得分:2)

好像email字段是CLOB而不是VARCHAR。你不能ORDER BY CLOB

如果您的专栏是CLOB,那么您可以通过CAST()字段排序:

select *
from users
order by id, cast(email as varchar2(50))  -- or whatever length you want.

请参阅SQL Fiddle With Demo

答案 1 :(得分:0)

仔细检查email列的实际类型。它似乎只是CLOB,不适用于订单。

显然,不需要存储超过4000个字符的电子邮件。

所以CLOB应该用VARCHAR2(255)替换。

请参阅What is the maximum length of a valid email address?

ORM中的Oracle类型映射可能存在一些问题。

答案 2 :(得分:0)

尝试使用柱位置 - (这意味着你不应该使用* - 无论如何我会推荐......)

select id, email from users order by 1,2

还应该可以通过CLOB的第一部分通过在by order by子句中应用一些字符串连接函数来进行排序。