string - 在特定字符处拆分字符串 SQL-Standard

标签 string postgresql split sql-standards

在我的 SQL 语句中,我必须从字符“_”处的字符串中提取一个子字符串。字符串可以是例如 'A_XXX' 'AB_XXX' 'ABC_XXXX',因此提取的子字符串应该像 'A' 'AB' 'ABC'。

在 Oracle 中,使用 substr() 和 instr() 函数很容易:

select substr('AB_XXX', 1, instr('AB_XXX', '_')-1) as substring
from dual;

结果是:

SUBSTRING
------------------------
AB

我需要这个查询来检查特定子字符串是否在字符串数组中。

整个查询看起来像:

select 'AB_XXX' from dual
where (instr('ABC_AB_A', substr('AB_XXX', 1, instr('AB_XXX', '_')-1))>0);

有没有办法用 SQL-Standard 编写它?

预先感谢您的帮助。

编辑:

如果 PostgreSQL 提供了替代功能,它也会有所帮助。其余的可以用例如解决在。 真正重要的部分是获取子字符串。

最佳答案

tl;dr

使用split_part这是专门为此而建的:

split_part(string, '_', 1)

解释

引用此 API docs :

SPLIT_PART() function splits a string on a specified delimiter and returns the nth substring.

3个参数分别是要拆分的字符串、分隔符和要返回的部分/子串编号(从1开始)。

因此,如果您有一个名为 string 的字段,其中包含诸如 AB_XXX 之类的内容,并且您希望获取 _ 之前的所有内容,那么您可以拆分通过它并获得第一部分/子字符串:split_part(string, '_', 1)

关于string - 在特定字符处拆分字符串 SQL-Standard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29895896/

相关文章:

html - 使用一对 P​​erl 正则表达式匹配的无限循环

python - 计算 Pandas 中单词出现次数的最快方法

javascript - 使用 javascript 查找文本文件结尾

ruby-on-rails - Rails WHERE 查询 has_many 关系不正确?

ruby-on-rails - Rails 在 Controller 中查询模型定义的方法

java - 拆分字符串在 java 中不起作用无法导入 `split`

java - 使用 Java 查找句子中的确切单词

java - 添加Spring Security导致列和表丢失

java - 如果定界符出现在给定索引之后,则仅根据定界符在 Java 中拆分字符串一次

arrays - GNU APL 和 Dyalog APL 中的分区行为