2014-06-23 4 views
0

SQL Server의 String에서 "#"추기경 다음에 나오는 숫자를 추출하려고합니다. 또한 나는 "#"simbol에 붙어 있지 않은 모든 숫자를 무시하고 싶다. 이를 위해 나는 이런 식으로 뭔가 만들어 :SQL Server의 문자열에서 int를 추출하십시오.

DECLARE @val nvarchar(50) 

SET @val = '#5777 some text' 

PRINT SUBSTRING(@val, PATINDEX('%#[0-9]%', @val) + 1, 
    PATINDEX('%[^0-9]%', SUBSTRING(@val, 
     PATINDEX('%#[0-9]%', @val) + 1, LEN(@val))) - 1) 


---------- 
@val = '#5777 some text': 
result = 5777 
@val = '#5777' 
result = error 

그것은 잘 작동을하는 경우 수 그 후하지만 일부 텍스트로 숫자 숫자는 내가라는 오류가 obvisualy 마지막 문자 인 경우

" 은 왼쪽 또는 SUBSTRING 함수에 전달 된 매개 변수 길이가 잘못 나는 같은 것을 할 수 물론 "

:

DECLARE @val nvarchar(50) 

SET @val = '#5777' 

PRINT SUBSTRING(@val, PATINDEX('%#[0-9]%', @val) + 1, 
    CASE WHEN PATINDEX('%[^0-9]%', SUBSTRING(@val, 
     PATINDEX('%#[0-9]%', @val) + 1, LEN(@val))) = 0 THEN 
     LEN(@val) ELSE 
     PATINDEX('%[^0-9]%', SUBSTRING(@val, 
     PATINDEX('%#[0-9]%', @val) + 1, LEN(@val))) - 1 
     END) 

---------- 
result = 5777 

제 질문은 이렇습니다 : 더 간단하고 효율적인 방법으로 이러한 목적을 달성 할 수있는 방법이 있습니까?

+2

예. 번호는 별도의 열에 저장하십시오. :) –

+0

@ AlvinThompson 불행히도 나는 그것을 할 수 없다. 사용중인 소프트웨어를 변경할 수 없습니다. ( – belyid

+2

문자열 끝 부분에 공백을 추가하지 마십시오. – podiluska

답변

0

A가 해키 비트 주셔서 감사합니다,하지만 (더 다음 텍스트, 텍스트 다음 없음) 당신의 시나리오를 모두 작동합니다

DECLARE @val nvarchar(50) 

SET @val = '#5777 some text' 
PRINT SUBSTRING(@val, PATINDEX('%#[0-9]%', @val) + 1, 
    ISNULL(NULLIF((PATINDEX('%[^0-9]%', SUBSTRING(@val, PATINDEX('%#[0-9]%', @val) + 1, LEN(@val))) - 1),-1),100)) 

SET @val = '#5777' 

PRINT SUBSTRING(@val, PATINDEX('%#[0-9]%', @val) + 1, 
    ISNULL(NULLIF((PATINDEX('%[^0-9]%', SUBSTRING(@val, PATINDEX('%#[0-9]%', @val) + 1, LEN(@val))) - 1),-1),100)) 
0
DECLARE @val nvarchar(50) 

SET @val = '#5777 some text' 

PRINT REPLACE(@val, SUBSTRING(@val, PATINDEX('%[^a-zA-Z0-9 ]%', @val), 1), '') 
0

당신이에 문자열을 구문 분석됩니다 경우 정기적으로 도구 상자에 string-splitting function을 추가하십시오.

SELECT string 
FROM dbo.SplitString(@value,' ') 
WHERE 
    string LIKE '#'+REPLICATE('[0-9]',LEN(string)-1) 
관련 문제