Sql server 选择长字符串中两个单词之间的子字符串
我有一个表,其中有一个名为“HL7_MESSAGE”的大字符串列,我需要从几个关键字中提取一个字符串,如下面的代码所示。我是一个Oracle人员,所以代码是用Oracle SQL编写和工作的,但我需要将其转换为SQL server代码。SQL server没有Regexp\u substr函数,但我无法使用charindex或Patindex实现这一点。基本上,我在两个字符串之间选择一个字符串,并在decode语句中查找两个单词/部分之间是否缺少数据。如果它只找到“.br\”,则它缺少数据,我只是标记缺少或已填充。无论如何,代码如下……如果有人能将其解码为SQL server 2011版,我将不胜感激 代码:Sql server 选择长字符串中两个单词之间的子字符串,sql-server,Sql Server,我有一个表,其中有一个名为“HL7_MESSAGE”的大字符串列,我需要从几个关键字中提取一个字符串,如下面的代码所示。我是一个Oracle人员,所以代码是用Oracle SQL编写和工作的,但我需要将其转换为SQL server代码。SQL server没有Regexp\u substr函数,但我无法使用charindex或Patindex实现这一点。基本上,我在两个字符串之间选择一个字符串,并在decode语句中查找两个单词/部分之间是否缺少数据。如果它只找到“.br\”,则它缺少数据,我只
感谢我在下面提供了一个使用patindex和substring从两个其他字符串之间的字符串中提取信息的快速示例,希望这将作为您进行转换的基础
DECLARE @a varchar(300) = 'this is a long string I will extract data from'
PRINT SUBSTRING(@a, PATINDEX('% long %', @a) + LEN('% long %')-2, PATINDEX('% extract %', @a) - (PATINDEX('% long %', @a) + LEN('% long %')-2))
关键在于使用两种patindex模式来确定起点和长度:
首先查找第一个字符串模式的结尾(Patindex查找开始,len-2查找结束):
然后,要查找长度,请使用Patindex查找第二个字符串的起点,然后减去上面找到的起点
Patindex(pattern, string) - (Patindex(start pattern, string) + LEN(start pattern, string) - 2 )
我希望这会有所帮助。叙述会有所帮助,但样本数据和预期结果会更有帮助。
Patindex(pattern, string) + LEN(pattern, string) - 2
Patindex(pattern, string) - (Patindex(start pattern, string) + LEN(start pattern, string) - 2 )