我在表格中有这种字符串:
我想要做的只是获得中间部分,例如:
基本上是' - 'Char
之前和之后的子串我试过这个(来自这里的一个例子):
SELECT SUBSTRING(Product.Name, LEN(LEFT(Product.[Name], CHARINDEX ('-', Product.[Name]))) + 1, LEN(Product.[Name]) - LEN(LEFT(Product.[Name], CHARINDEX ('-', Product.[Name]))) - LEN(RIGHT(Product.[Name], LEN(Producto.[Name]) - CHARINDEX ('-', Product.[Name]))) - 1)
FROM Product
但它给了我这个错误:
[42000] [Microsoft][SQL Server Native Client 10.0][SQL Server]Invalid length parameter passed to the LEFT or SUBSTRING function. (537)
说实话,我不知道如何解决错误,因为我不理解示例中的解决方案。我该怎么办?
感谢。
答案 0 :(得分:4)
一个选项是ParseName()
示例强>
Declare @S varchar(max)='AM-65-800'
Select parsename(replace(@S,'-','.'),2)
<强>返回强>
65
答案 1 :(得分:1)
使用SUBSTRING
,根据“ - ”的位置计算起点和长度:
SELECT SUBSTRING('ABC-65-DEF',
CHARINDEX('-', 'ABC-65-DEF') + 1,
CHARINDEX('-', 'ABC-65-DEF', CHARINDEX('-', 'ABC-65-DEF') + 1) - CHARINDEX('-', 'ABC-65-DEF') - 1)
基本上,它找到' - '(CHARINDEX('-', 'ABC-65-DEF')
)的第一个实例,然后是' - '(CHARINDEX('-', 'ABC-65-DEF', CHARINDEX('-', 'ABC-65-DEF') + 1)
)的第二个实例,并在中间抓取子串。
答案 2 :(得分:0)
这将有助于找到旧版SQL Server的中间部分,包括2008年。
DECLARE @SomeText VARCHAR(100) = 'AM-75/86-650'
SELECT LEFT(RIGHT(@SomeText, LEN(@SomeText) - CHARINDEX('-', @SomeText)),
CHARINDEX('-', RIGHT(@SomeText, LEN(@SomeText) - CHARINDEX('-', @SomeText)))-1)
返回:'75 / 86'