如何在 Oracle SQL 中选择直到特定字符的子字符串?

2023-11-24

假设我有一个表列,其结果如下:

ABC_blahblahblah
DEFGH_moreblahblahblah
IJKLMNOP_moremoremoremore

我希望能够编写一个查询,从所述表中选择此列,但仅返回到下划线 (_) 字符的子字符串。例如:

ABC
DEFGH
IJKLMNOP

SUBSTRING 函数似乎无法胜任这项任务,因为它是基于位置的,并且下划线的位置各不相同。

我考虑了 TRIM 函数(特别是 RTRIM 函数):

SELECT RTRIM('listofchars' FROM somecolumn) 
FROM sometable

但我不确定如何让它工作,因为它似乎只删除特定的字符列表/集合,而且我实际上只在导致下划线字符的字符之后。


使用 SUBSTR、INSTR 和 NVL(对于没有下划线的字符串)的组合将返回您想要的结果:

SELECT NVL(SUBSTR('ABC_blah', 0, INSTR('ABC_blah', '_')-1), 'ABC_blah') AS output
  FROM DUAL

Result:

output
------
ABC

Use:

SELECT NVL(SUBSTR(t.column, 0, INSTR(t.column, '_')-1), t.column) AS output
  FROM YOUR_TABLE t

参考:

  • SUBSTR
  • INSTR

Addendum

如果使用 Oracle10g+,您可以通过以下方式使用正则表达式REGEXP_SUBSTR.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Oracle SQL 中选择直到特定字符的子字符串? 的相关文章

随机推荐

  • Kafka Connect 接收器任务忽略容差限制

    我尝试忽略接收器连接器中的错误消息errors tolerance all选项 完整的连接器配置 name crm data sink pandora config connector class io confluent connect
  • Linux下C语言读写串口

    我试图使用 FTDI 通过 USB 端口发送 接收数据 所以我需要使用 C C 处理串行通信 我正在尝试Linux 乌班图 基本上 我连接到一个正在侦听传入命令的设备 我需要发送这些命令并读取设备的响应 命令和响应都是ASCII 字符 使用
  • C++ 中的设置/获取方法

    Java 程序员和 API 似乎更喜欢显式的 set get 方法 然而我的印象是 C 社区不赞成这种做法 如果是这样 是否有特殊原因 除了更多行代码之外 为什么会这样 另一方面 为什么Java社区选择使用方法而不是直接访问 谢谢 理想情况
  • 使用 Rust 稳定通道和夜间通道并行编译代码有多困难?

    Cargo 创建的默认文件树允许并行编译发布和调试版本 因为它们位于自己的目录中 target release and target debug 分别 允许并行编译有多困难stable nightly 编译器 例如使用目录 target d
  • 在 R 中合并两个列表

    我有两个清单 first list a 1 b 2 c 3 second list a 2 b 3 c 4 我想合并这两个列表 所以最终产品是 a 1 1 2 b 1 2 3 c 1 3 4 有一个简单的函数可以做到这一点吗 如果列表始终具
  • 更新部分主键Entity Framework 4.0

    我有一个带有复合主键的表 3 列 UTP ID ITEMId UTS ID CategoryID USS ID SubCategoryID 例如 当我尝试使用 EF 4 更改 SubCategory 时 出现以下错误 utl USS ID
  • 写入帧缓冲区

    我使用的是带有内置图形加速器 GMA HD 的 i5 内核 在 RHEL 6 0 操作系统上运行 我需要测试显卡驱动程序的图形加速能力 我发现我的电脑上是i915 我使用以下代码 我从互联网上获得并进行了一些修改 来写入帧缓冲区 inclu
  • 多行搜索替换为 Perl

    我知道这类问题以前已经被问过很多次了 我再次来到这里的原因是我觉得我错过了一些简单而基本的东西 是否有可能使这种搜索替换例程变得更好 例如 无需打开同一文件两次 也欢迎与速度相关的建议 请注意 这适用于多行匹配并替换多行字符串 bin pe
  • 如何将 2D Eigen::Tensor 更改为 Eigen::Matrix

    看起来很简单 我本以为某种类型的转换是可能的 但我似乎找不到任何相关文档 虽然我在应用程序中找到了避免使用 Eigen Matrix 类的方法 但 TensorFlow 仅适用于 Eigen Tensor 而我使用的另一个库仅具有直接使用
  • Python将字符串拆分为多个字符串[重复]

    这个问题在这里已经有答案了 可能的重复 在Python中将字符串分割成列表 我有一个带有很多部分字符串的字符串 gt gt gt s str1 str2 str3 str4 现在我有一个类似以下的功能 gt gt gt def f args
  • 迁移到 rbenv 会破坏乘客 (nginx)

    我在生产服务器上从 RVM 迁移到 rbenv 我使用 rvm implode 卸载了 rvm 并安装了 rbenv ruby 1 9 2 rails passenger 和 nginx module 除了按如下方式更改 Passenger
  • 查找 numpy 数组中最接近的值

    我如何找到最接近的值在 numpy 数组中 例子 np find nearest array value import numpy as np def find nearest array value array np asarray ar
  • 如何缩短 ggplot 中的 x 轴标签文本?

    我正在 ggplot 中绘制一个图 其中 x 轴标签包含不同蛋白质的名称 但我遇到了麻烦 因为其中一些名称太长 并且标签变得太大 以至于很难看到图 有什么方法可以减少 x 轴标签中的字符数 而不是 打印 更大的图表 这是一个显示我的问题的示
  • Bash - 计算输入数字的平均值

    需要有关 Linux Bash 脚本的帮助 本质上 运行脚本时会要求用户提供三组数字 然后计算输入的数字并得出平均值 bin bash echo Enter a number read a while a do echo Enter a s
  • 如何解决 Bash 命令替换中的错误“bash: !d': event not found”[重复]

    这个问题在这里已经有答案了 我正在尝试解析 VNC 服务器启动事件的输出 但在命令替换中使用 sed 进行解析时遇到了问题 具体地 远程VNC服务器的启动方式如下 address1 email protected VNCServerResp
  • MySQL LAST_INSERT_ID() 与多记录 INSERT 语句一起使用

    如果我使用执行单个记录插入的循环插入多个记录 则返回的最后一个插入 ID 正如预期的那样 是最后一个 但是如果我执行多条记录插入语句 INSERT INTO people name age VALUES William 25 Bart 15
  • 弱分类器

    我正在尝试实现一个使用 AdaBoost 算法的应用程序 我知道 AdaBoost 使用一组弱分类器 但我不知道这些弱分类器是什么 你能用一个例子向我解释一下 并告诉我是否必须创建自己的弱分类器或者我应该使用某种算法吗 弱分类器 或弱学习器
  • 在 C++ 中不使用指针和使用常规对象可以进行动态绑定吗

    include
  • 如何在本地测试 Chromium/Chrome 扩展的内联安装?

    我正在尝试按照本文档测试 Chrome 网上应用店的内联安装功能 https developers google com chrome web store docs inline installation 我正在本地开发此程序以进行测试 并
  • 如何在 Oracle SQL 中选择直到特定字符的子字符串?

    假设我有一个表列 其结果如下 ABC blahblahblah DEFGH moreblahblahblah IJKLMNOP moremoremoremore 我希望能够编写一个查询 从所述表中选择此列 但仅返回到下划线 字符的子字符串