获取“-”字符前后的子字符串

elu*_*nap 3 sql sql-server

我在表中有这样的字符串:

  • AM-65-800
  • AM-75/86-650
  • D-27-600

我想做的是只得到中间部分,例如:

  • 65
  • 75/86
  • 27

基本上是“-”字符前后的子字符串

我尝试过这个(来自这里的示例):

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
Run Code Online (Sandbox Code Playgroud)

但它给了我这个错误:

[42000] [Microsoft][SQL Server Native Client 10.0][SQL Server]Invalid length parameter passed to the LEFT or SUBSTRING function. (537)
Run Code Online (Sandbox Code Playgroud)

老实说,我不知道如何解决该错误,因为我不明白示例中的解决方案。我能做些什么?

谢谢。

Joh*_*tti 5

一种选择是 ParseName()

例子

Declare @S varchar(max)='AM-65-800'

Select parsename(replace(@S,'-','.'),2)
Run Code Online (Sandbox Code Playgroud)

退货

65
Run Code Online (Sandbox Code Playgroud)