2017-05-04 16 views
0

たとえば、パートナンバーがあり、最初のピリオドの後で2番目のピリオドの前に文字列を返すようにしたいとします。私は私の列のリターンを持っている必要があり2つのピリオド間の文字列の選択方法(SQL Server 2012)

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 

1 
1 
1 
2 
2 
3 
3 
4 
10 
10 
11 
私は、それでは、私のような部品番号のリストを持っているとしましょう他の同様の質問を見たが

をそれを把握することができませんでした

SQL Server 2012を使用する前にありがとう

編集:これは私のコードですが、これはテーブルを返しますが、並べ替えはどこにでもあり、PartNo列は分割しようとしています

あなたがリバース(と協力しParseName()を使用することができます
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 
+0

あなたは動作しないことを試してみましたか?何も試していないのであれば、Googleの "SQL Server TSQL文字列処理関数"を使うことができます。文字列内で部分文字列を見つける方法や、文字列から部分文字列を抽出する方法を知る必要があるようです。 – STLDeveloper

+0

2つの既知の文字列の間で文字列を選択する[A SQLクエリ]の可能な複製(http://stackoverflow.com/questions/18362260/a-sql-query-to-select-a-string-between-two-known-文字列) –

+0

自分の投稿を編集してベースコードを追加しました。実際にはあまり試してみませんでしたが、私は基本的な文字列関数がどのように左、部分文字列のように機能するのか知っていますが、特定のデータを抽出する方法はまだ分かりません。私の部品番号に非常に多くの期間があることは助けになりません – user1452574

答えて

5

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 

戻り

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 
+0

私はあなたがここで何をしたのか把握しようとしています。 ParseNameは、区切り記号がピリオドの場合にのみ機能しますか? – Jason

+0

@Jasonはい、それは機能です –

+0

これを行うための滑らかな方法の種類:) – dana

関連する問題