CASE 表达式 WHEN 的更短替代方案?

Posted

技术标签:

【中文标题】CASE 表达式 WHEN 的更短替代方案?【英文标题】:Shorter alternative to CASE expression WHEN? 【发布时间】:2019-04-08 15:53:38 【问题描述】:

我有一个 SQL 表达式来将一些数据从一种格式映射到另一种格式:

CASE field
WHEN 'AU' THEN '036'
WHEN 'AT' THEN '040'
WHEN 'BE' THEN '056'
-- and so on
END

不幸的是,我需要将此表达式放入有长度限制的文本框(NetSuite 公式字段)中,并且我拥有的选项数量不适合。在 Oracle 中是否有比 CASE 表达式更简洁的替代方法,以便我可以使用更少的字符来编写它?

【问题讨论】:

将其写为decode 可能有效。但这似乎需要某种形式的翻译表,而不是很长的decode 声明。 @JustinCave 我同意,但不幸的是,NetSuite 没有办法在公式中加入表格......系统试图隐藏数据库,这对于我们这些使用过的人来说非常烦人到 SQL。 @Wolfgang - 您可以通过连接添加一个执行翻译的视图;而是查询该视图? 难道也没有办法调用查询翻译表的函数吗? @AlexPoole 它也不授予对底层数据库的任何访问权限来创建视图。 【参考方案1】:

是的,使用DECODE() function:

DECODE(field,
'AU', '036',
'AT', '040',
'BE', '056'
)

【讨论】:

以上是关于CASE 表达式 WHEN 的更短替代方案?的主要内容,如果未能解决你的问题,请参考以下文章

case表达式详解

CASE 表达式 - 在 WHEN 部分再添加一个条件

mysql--CASE WHEN 统计多个字段

CASE .. Oracle SQL 中的 WHEN 表达式

oracle中case when使用

MySQL 的CASE WHEN 语句