首页 >数据库 >mysql教程 >如何使用 REGEXP_SUBSTR() 从包含 NULL 的逗号分隔列表中可靠地提取特定值?

如何使用 REGEXP_SUBSTR() 从包含 NULL 的逗号分隔列表中可靠地提取特定值?

Patricia Arquette
Patricia Arquette原创
2024-12-29 00:44:13386浏览

How to Reliably Extract Specific Values from Comma-Separated Lists Containing NULLs Using REGEXP_SUBSTR()?

从包含 NULL 的列表中选择单个值的正则表达式

问题:

REGEXP_SUBSTR () 未能检索到当存在空值时,逗号分隔列表中所需的第 n 个值。当值为 null 时,它将返回下一个非空值作为第 n 次出现。

解决方案:

要解决此问题,可以使用修改后的 REGEXP_SUBSTR() 表达式可以使用:

REGEXP_SUBSTR('1,,3,4,5', '(.*?)(,|$)', 1, 2, NULL, 1)

此表达式通过以下方式捕获所需的数据步骤:

  1. (.*?):匹配零个或多个可选字符。
  2. (,|$):匹配逗号或行尾。
  3. 1:指定第一个匹配的组(子组)为所需数据。
  4. 2:设置出现次数以选择所需的第 n 个数据value.
  5. NULL:如果未找到指定匹配项,则返回 null。

可重用函数:

更简单、更多使用方便,这个修改后的 REGEXP_SUBSTR() 表达式可以封装在 PL/SQL 中函数:

FUNCTION GET_LIST_ELEMENT(string_in VARCHAR2, element_in NUMBER, delimiter_in VARCHAR2 DEFAULT ',') RETURN VARCHAR2 IS
BEGIN
  RETURN REGEXP_SUBSTR(string_in, '(.*?)(\'||delimiter_in||'|$)', 1, element_in, NULL, 1);
END GET_LIST_ELEMENT;

用法示例:

从列表 '123,222,,432,555' 中检索第 4 个元素:

select get_list_element('123,222,,432,555', 4) from dual;

以上是如何使用 REGEXP_SUBSTR() 从包含 NULL 的逗号分隔列表中可靠地提取特定值?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn