在我的 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/