2016-06-14 3 views
0

그래서 나는 이런 식으로 시작하는 모든 행 (물론, 적어도 그들이 모든 단어의 비율로 시작)가 내 LOGS 표에 메시지라는이 칼럼이 있습니다열 SQL에서 문자열을 추출 하시겠습니까?

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

내가 문자열을 선택해야을

1569ms 

이 경우. 그들은 항상 *와 # 사이에옵니다. 어떻게해야합니까? 언급 한 SQL 쿼리 아래

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()를) 또는 가져 문자열 (CHARINDEX)에있는 문자의 색인이므로 두 함수를 모두 사용하여 우리의 요구 사항에 따라 정확한 구문을 쉽게 찾을 수 있습니다.

+0

그것은 당신이 동일한 열에 다른 패턴 데이터를 가지고있을 가능성이있을 수 있습니다 그래서 그 경우 그것은 성명을 위반합니다. 나는 내 대답을 수정했다. 이제 당신은 그들의 최신 스크립트를 가져갈 수있다. –

관련 문제