在 SQLPlus 中的情况

Case when in SQLPlus

我仍在学习 SQLPlus,我正在尝试使用来自另一个名为 Business 的 table 的数据填充一个名为 DM_Businees 的 table(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列:如果它包含单词"Event"然后在[=16=中的列中写入"Event Planning" ].问题是它不起作用:它没有显示任何错误,但每一行都是空的。

我试过同样的事情,但用数字代替(比如 1 代替 "Event Planning"、2 代替 "Financial Services"、3 代替 "Home Services"...)和它工作得很好(列数据类型是 varchar2(200))。

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

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

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

列中的数据是什么样的? 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' ...