SQLPlus 中的情况

Posted

技术标签:

【中文标题】SQLPlus 中的情况【英文标题】:Case when in SQLPlus 【发布时间】:2020-05-25 00:50:29 【问题描述】:

我仍在学习 SQLPlus,我正在尝试使用另一个名为 Business 的表中的数据填充一个名为 DM_Businees 的表(如果有帮助,请使用 Oracle DB 12c)。

INSERT INTO 查询中,我提出了以下内容:

CASE
   WHEN BUSINESS.CATEGORIES LIKE '%Event%' THEN 'Event Planning'
   WHEN BUSINESS.CATEGORIES LIKE '%Financial%' THEN 'Financial Services'
   WHEN BUSINESS.CATEGORIES LIKE '%Home%' THEN 'Home Services'
   WHEN BUSINESS.CATEGORIES LIKE '%Professional%' THEN 'Professional Services'
   ELSE 'OTHER'
END

我的目标是检查Business 中的Categories 列:如果它包含“事件”一词,则在DM_Business 的列中写入“事件计划”。问题是它不起作用:它没有显示任何错误,但每一行都是空的。

我尝试过同样的事情,但用数字代替(比如 1 代替“活动策划”,2 代替“金融服务”,3 代替“家庭服务”......)而且效果很好(列数据类型为varchar2(200))。

你能帮帮我吗?非常感谢。

【问题讨论】:

@GordonLinoff 这怎么可能?当我更改数字字符串时,不触及任何其他内容,一切正常。如何提供一些示例数据? (如果有帮助,那就是 YELP 数据集) 输入来自CASE 语句的数据的列的数据类型是什么?是数字吗? @Jado:要提供测试数据,您可以使用问题文本下方的edit 按钮编辑自己的问题。将测试数据包含为格式化文本 - 如果您提供表定义(即 CREATE TABLE 语句)和一系列 INSERT 语句来填充表,那就更好了。但是,在这种情况下,我怀疑@zip 的答案(如下)会对您有所帮助。 【参考方案1】:

由于测试数据,我会做这样的事情 Jado:确保一切都是低调

CASE
   WHEN lower(BUSINESS.CATEGORIES) LIKE '%event%' THEN 'Event Planning'
   WHEN lower(BUSINESS.CATEGORIES) LIKE 'financial%' THEN 'Financial Services'
   WHEN lower(BUSINESS.CATEGORIES) LIKE '%home%' THEN 'Home Services'
   WHEN lower(BUSINESS.CATEGORIES) LIKE '%professional%' THEN 'Professional Services'
   ELSE 'OTHER'
END

【讨论】:

【参考方案2】:

列中的数据是什么样的? Oracle 区分大小写。您可以尝试使用 upper() 或 lower() 进行测试。您可能还想明确检查 null

类似于:

CASE
    WHEN BUSINESS.CATEGORIES IS NULL THEN 'UNDEFINED'
    WHEN UPPER(BUSINESS.CATEGORIES) LIKE '%EVENT%' THEN 'Event Planning'
    WHEN UPPER(BUSINESS.CATEGORIES) LIKE 'FINANCIAL' THEN 'Financial Services' ...

【讨论】:

以上是关于SQLPlus 中的情况的主要内容,如果未能解决你的问题,请参考以下文章

防止 sqlplus 截断列名,没有单独的列格式

在没有提示变量文本的情况下假脱机 sqlplus 查询

Sqlplus 参数

Oracle--sqlplus如何设置SQLPlus结果显示的宽度,ORACLE sqlplus提示符设置

使用sqlplus "/ as sysdba"的情况

sqlplus 中的 -s 选项是做啥用的?