我想在SQL Server中使用substring
捕获特定文本字符串和以下char(10)
之间的字符串。问题在于,完整的字符串中有几种char(10)
的出现,因此我需要一些代码来在我的特定字符串之后定位第一个char(10)
。使用以下代码导致由于负值而导致错误(第一个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))) - 1);
错误:无效长度参数传递给左或子字符串 功能。
在此问题中对特定数据的非常简单的答案:您可以将第三个参数传递给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
在'my specific string'
之后无法包含CHAR(10)
...或者也可能包含多个'my specific string'
s。如果您想要在单个选择中处理(更复杂(要求的所有逻辑,那么事情可能会很快变得凌乱。