2016-12-07 4 views
1

で式を繰り返さないための方法私は、次のSQLを持っている:SQL Serverの文字列操作クエリ

SUBSTRING(Location, 
      CHARINDEX(' : ', Location) + 3, 
      CHARINDEX(' ms - ', Location) - (CHARINDEX(' : ', Location) + 3)) 

(場所はこのようなものが考えられます。1dasev : 232 ms - 323-asv3Rsubstring232を返します)

の場合私はこれをC#で書きましたが、CHARINDEX(' : ', Location) + 3を2回再計算しません。私はそれを変数に格納し、それを再利用します。

私はすべて同じようなことをするためにSQLにクールなトリックがありますか?(私のクエリは、上記の単純な例よりも複雑になり、私はそれを読みやすくするために期待しています。)

+0

は一貫した文字列形式ですか? –

+0

あなたは、サブクエリやそれ以外の一般的なテーブル式を導入しなければならないので、一般的には式を繰り返すことによって行われます。 – Matt

答えて

1

トリックがありますCROSS APPLYを使用して計算するには

SELECT 
SUBSTRING(Location, 
      c, 
      CHARINDEX(' ms - ', Location) - c) 
FROM YOURTABLE 
     CROSS APPLY 
     (
     SELECT c = CHARINDEX(' : ', Location) + 3 
    ) c 
+0

完璧!ありがとうございました。 – Vaccano

1

あなたの一般的な式を定義するためにサブクエリを使用することができます。

SELECT SUBSTRING(Location, x.AfterColon, CHARINDEX(' ms - ', Location) - x.AfterColon) 
FROM (
    SELECT *, (CHARINDEX(' : ', Location) + 3) AS AfterColon 
    FROM ... 
) x