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 中的情况的主要内容,如果未能解决你的问题,请参考以下文章