You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Oracle HR Schema的SQL查询:统计员工姓氏首'e/E'前字符数

针对Oracle HR Schema的字符统计解决方案

嘿,这个需求用Oracle的字符串函数就能轻松搞定,我给你整理了两种可行的写法,还考虑了旧版本兼容性:

方案一:利用Oracle 12c+的不区分大小写匹配(推荐)

如果你的Oracle版本是12c及以上,直接用INSTR函数的不区分大小写参数会更简洁:

SELECT
    last_name,
    -- 计算第一个'e'或'E'之前的字符数量
    CASE
        -- 找到匹配字符时,返回位置减1(因为位置从1开始计数)
        WHEN INSTR(last_name, 'e', 1, 1, 'i') > 0 THEN INSTR(last_name, 'e', 1, 1, 'i') - 1
        -- 没找到的话,返回整个姓氏的长度(毕竟所有字符都在"第一个e/E之前")
        ELSE LENGTH(last_name)
    END AS chars_before_first_e
FROM
    employees;

关键函数解释:

  • INSTR(last_name, 'e', 1, 1, 'i'):这个函数会在last_name里从第1个字符开始,查找第1次出现的e,最后的'i'标记表示忽略大小写,所以E也会被匹配到。如果找到就返回该字符的位置(从1开始计数),没找到则返回0。

方案二:兼容所有Oracle版本的写法

如果你的Oracle版本比较旧(不支持INSTR的'i'参数),可以通过转换大小写来实现不区分匹配:

SELECT
    last_name,
    CASE
        WHEN INSTR(LOWER(last_name), 'e') > 0 THEN INSTR(LOWER(last_name), 'e') - 1
        ELSE LENGTH(last_name)
    END AS chars_before_first_e
FROM
    employees;

这里我们先把last_name转成小写,再查找e的位置,效果和不区分大小写完全一致,适合所有版本的Oracle。


额外小技巧:

如果你只想筛选出姓氏里包含e或E的员工,可以在查询末尾加WHERE条件:

WHERE INSTR(last_name, 'e', 1, 1, 'i') > 0 -- 对应方案一
-- 或者兼容版本:WHERE INSTR(LOWER(last_name), 'e') > 0

内容的提问来源于stack exchange,提问作者Yağız Demir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:24:14