使用具有多个相同字符的子字符串

时间:2019-05-21 08:32:03

标签: sql-server substring

我想在SQL Server中使用<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.2.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> 来捕获特定文本字符串和随后的substring之间的字符串。问题在于,整个字符串中多次出现char(10),因此我需要一些代码来定位特定字符串之后的第一个char(10)。使用下面的代码会由于负值而导致错误(第一个char(10)出现在char(10)之前)。

my specific string
  

错误:无效的长度参数传递给LEFT或SUBSTRING   功能。

1 个答案:

答案 0 :(得分:3)

此问题中特定数据的非常简单的答案:您可以将第三个参数传递给CHARINDEX函数调用,该函数调用将在特定起始索引之后查找CHAR(10)。作为第三个参数,您可以传递找到的'my specific string'的索引:

SELECT SUBSTRING(col, LEN(LEFT(col, CHARINDEX ('my specific string', col))) + 1, LEN(col) - LEN(LEFT(col, 
    CHARINDEX ('my specific string', col))) - LEN(RIGHT(col, LEN(col) - CHARINDEX (char(10), col, CHARINDEX ('my specific string', col)))) - 1);

但是,我不确定这是否能真正解决您的最终问题。也许您的colCHAR(10)之后不能包含'my specific string' ...或者它可能也包含多个'my specific string'。如果您希望所有逻辑都能在一个SELECT语句中处理您的(更复杂的)需求,那么事情很快就会变得混乱。