如何在两个句点之间选择字符串(SQL Server 2012)

use*_*574 0 sql t-sql sql-server

假设我有一堆部件号,我想要一个列在第一个句点之后和第二个句点之前返回字符串.我看了其他类似的问题,但无法弄清楚

所以,假设我有部件号列表,例如:

10416.1.1.4
10416.1.1.7
10416.1.1.1
10416.2.3
10416.2.2
10416.3.1.2
10416.3.1.3
10416.4.1.1
10416.10.1
10416.10.2
10416.11.1.1
Run Code Online (Sandbox Code Playgroud)

我应该让我的专栏回归:

1
1
1
2
2
3
3
4
10
10
11
Run Code Online (Sandbox Code Playgroud)

使用SQL Server 2012,提前感谢

编辑:这是我的代码,这会返回一个表,但排序遍布整个地方,PartNo列就是我要分割的内容

SELECT DISTINCT OrderDet.OrderNo, Scheduling.JobNo, OrderDet.PartNo, 
OrderDet.Priority
FROM Scheduling LEFT JOIN OrderDet ON Scheduling.JobNo = OrderDet.JobNo
WHERE Scheduling.WorkCntr = 'Glazing'
ORDER BY OrderDet.Priority DESC
Run Code Online (Sandbox Code Playgroud)

Joh*_*tti 5

你可以使用ParseName()与Reverse()一起使用

Declare @YourTable Table ([SomeCol] varchar(50))
Insert Into @YourTable Values
 ('10416.1.1.4')
,('10416.1.1.7')
,('10416.1.1.1')
,('10416.2.3')
,('10416.2.2')
,('10416.3.1.2')
,('10416.3.1.3')
,('10416.4.1.1')
,('10416.10.1')
,('10416.10.2')
,('10416.11.1.1')

Select * 
      ,NewCol = reverse(ParseName(reverse(SomeCol),2))
from @YourTable
Run Code Online (Sandbox Code Playgroud)

返回

SomeCol         NewCol
10416.1.1.4     1
10416.1.1.7     1
10416.1.1.1     1
10416.2.3       2
10416.2.2       2
10416.3.1.2     3
10416.3.1.3     3
10416.4.1.1     4
10416.10.1      10
10416.10.2      10
10416.11.1.1    11
Run Code Online (Sandbox Code Playgroud)