首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么Oracle不能按顺序选择语句的真实性

为什么Oracle不能按顺序选择语句的真实性
EN

Stack Overflow用户
提问于 2013-08-20 19:41:31
回答 1查看 155关注 0票数 2

如果我想按一个列排序一个表,但在MySQL中将一个指定的行提取到顶部,我可以这样做.(小提琴)

代码语言:javascript
运行
复制
select * from name
order by surname != 'moon', surname

然而,当我想在甲骨文中这样做时,order子句中的真实测试不起作用,最后我不得不这样做.(小提琴)

代码语言:javascript
运行
复制
select surname from name 
order by case when surname = 'moon' then 0 else 1 end, surname 

Oracle不支持order子句中的真实测试的原因是什么?

(甚至是select语句)

结果

(所有这些都是按字母顺序排列的,但moon除外,它已浮动到顶部)

代码语言:javascript
运行
复制
SURNAME
moon
adane
bell
day
larkin
williams
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-20 19:54:49

我希望答案可以归结为这样一个事实,即Oracle中没有boolean数据类型(PL/ SQL中有一个布尔值)。表达式a != b必须计算为布尔值,而SQL需要能够将其作为一流的数据类型来处理,这样才能执行类似于ORDER BY的操作或在SELECT列表中返回它。

您发布的case声明或相应的DECODE很可能是您的最佳选择。您可以通过创建一个用户定义的布尔类型来实现一些不必要的过度杀戮(但可能不是在您试图解决的实际问题中),该类型实现了一些方法,例如对结果进行排序,并使用这些方法来评估您的条件。但这比您的CASE语句更多代码。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18343688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档