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