【问题标题】:How to show a query statement where it ends with a certain letter?如何显示以某个字母结尾的查询语句?
【发布时间】:2021-10-14 17:41:03
【问题描述】:

我的查询语句中有这个问题,我必须排除所有名字以 y 结尾的销售人员(Lily,Maddy),并且不能使用关键字“LIKE”。

到目前为止,这是我的查询和输出,即使添加了以字母 y 结尾的名称的排除项后,它也应该是这样的:

预期的输出但没有排除:

添加“REGEXP_LIKE”等命令时:

TL;DR我需要找到一种方法来排除表中所有以字母 y 结尾的名称,而不用去掉 Emp Name 中的, 并且不使用关键字“LIKE”

【问题讨论】:

  • 这个问题与您昨天提出的问题有何不同?昨天您已经选择了正确答案?
  • 昨天是关于如何显示应该只显示以字母 B 开头并且必须包含字母 l 的名称的字母。在这种情况下,我只是在尝试排除名字中的字母 y 时使用 regexp_life 或 substr 时无法显示逗号

标签: sql database oracle


【解决方案1】:

由于您没有发布任何示例数据,我自己做了一些。

SQL> with
  2  employees (employee_id, first_name, last_name) as
  3    (select 1, 'Freya', 'Gomez'  from dual union all
  4     select 2, null   , null     from dual union all
  5     select 9, 'Lily' , 'Marlen' from dual
  6    ),
  7  orders (salesman_id, order_id) as
  8    (select 2, 100 from dual union all
  9     select 9, 900 from dual
 10    )
 11  select e.employee_id,
 12         e.first_name ||', '|| e.last_name full_name,
 13         o.order_id
 14  from employees e left join orders o on o.salesman_id = e.employee_id
 15  order by e.employee_id;

EMPLOYEE_ID FULL_NAME       ORDER_ID
----------- ------------- ----------
          1 Freya, Gomez
          2 ,                    100
          9 Lily, Marlen         900   --> you want to get rid of this row
                                       --  because Lily ends with a "y"
SQL>

如果您添加 WHERE 子句(第 15 行),您将得到 错误 结果,因为 - 正如您所说 - 您想保留 逗号 行:

<snip>
 11  select e.employee_id,
 12         e.first_name ||', '|| e.last_name full_name,
 13         o.order_id
 14  from employees e left join orders o on o.salesman_id = e.employee_id
 15  where substr(e.first_name, -1) <> 'y'
 16  order by e.employee_id;

EMPLOYEE_ID FULL_NAME       ORDER_ID
----------- ------------- ----------
          1 Freya, Gomez

SQL>

NVL 来救援!见第 15 行:

<snip>
 11  select e.employee_id,
 12         e.first_name ||', '|| e.last_name full_name,
 13         o.order_id
 14  from employees e left join orders o on o.salesman_id = e.employee_id
 15  where nvl(substr(e.first_name, -1), ',') <> 'y'                         --> this
 16  order by e.employee_id;

EMPLOYEE_ID FULL_NAME       ORDER_ID
----------- ------------- ----------
          1 Freya, Gomez
          2 ,                    100

SQL>

【讨论】:

  • 哦,现在可以理解为什么缺少 NVL 会导致语句不显示逗号。再次感谢您,您是救生员
【解决方案2】:

如果你想避免每个名字以 Y 结尾的人,那么使用这个:

    where substr(first_name, -1) <> 'y'

【讨论】:

  • 这也去掉了应该在 emp 名称中显示的“,”
  • 请澄清您的问题。您正在将 last_name 连接到 comma_space 到 first_name。您正在添加逗号。您需要做的就是在查询中添加 where 子句。它仍然会返回一个逗号,但只显示名字不以 Y 结尾的人。为什么 LEFT 加入员工?您是否希望找不到一些?
  • 我很抱歉不清楚。前两行的预期输出应该是: Emp Name Total Sale ------------- ---------- ------ , $18,245,463.50 Gomez, Freya $8,081,332.30 添加 where 子句将返回 Emp Name Total Sale ------------- --- ------------- Gomez, Freya $8,081,332.30 Freeman, Florence $4,341,842.14
  • 对不起,补充一下,加入的原因是员工不显示,但员工ID显示,但我仍然需要显示员工姓名和逗号。
猜你喜欢
  • 2017-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-30
  • 2016-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多