2016-06-14 10 views
0

は、だから私はこのように始まるすべての行(まあ、少なくとも彼らはすべての単語の割合で始まる)は私のLOGS表にMESSAGEと呼ばれるこのコラムがあります。列sqlから文字列を抽出しますか?

Percentage|15/25|1%*1569ms#0ms*C:\Snapshot\Snapshot_15.jpg 

私は、文字列を選択する必要がありますが

この場合、
1569ms 

です。彼らはいつも*と#の間に来ます。 どうすればいいですか?

SELECT SUBSTRING(MESSAGE, ,) as Duration FROM LOGS 
+0

TBH、私はこの操作をデータベースレイヤではなくアプリケーションレイヤで実行します。 –

+0

ええ、私はそれが良いかもしれないことを知っています。しかし、この場合、私のデータベースには本当にクエリが必要です –

+1

どのような特定のタイプのSQLですか?それは答えに影響する可能性が非常に高いでしょう。編集:質問にSQLタイプの適切なタグを追加してください。 – user2366842

答えて

2
SELECT SUBSTRING(MESSAGE, 
      CHARINDEX('*',message)+1, 
      CHARINDEX('#',message)-CHARINDEX('*',message)-1) as Duration 
FROM LOGS 
+0

ありがとう!それは働いた:D –

1

自分で指定した出力を取り出すために言及したSQLクエリ以下の使用:

SELECT DISTINCT CASE 
     WHEN NAME IS NOT NULL 
      AND len(NAME) > 40 
      AND (CHARINDEX('#0ms', NAME) - CHARINDEX('|1%*', NAME) - 4) > 0 
      THEN SUBSTRING(NAME, CHARINDEX('|1%*', NAME) + 4, (CHARINDEX('#0ms', NAME) - CHARINDEX('|1%*', NAME) - 4)) 
     ELSE '' 
     END 
FROM dbo.Table_1 

私たちは、文字列(SUBSTRING())を破るために、または取得するためにSQLでイン・ビルド機能を持っています文字列(CHARINDEX)内の任意の文字のインデックスです。したがって、両方の関数を使用することによって、私たちの要件に従って正確な構文を簡単に見つけることができます。

+0

あなたは同じ列にいくつかの他のパタ​​ーン化されたデータを持っている可能性がありますので、その場合はステートメントを壊しています。私は自分の答えを変更しました。今、あなたは彼らの最新のスクリプトを取ることができます。 –

関連する問題