2014-10-10 2 views
0

행의 다음 값을 제공하는 저장 프로 시저를 작성하려고합니다.SQL Server에서 문자열의 모든 문자를 제거하십시오.

내 경우 참조 번호를 보내고 저장 프로 시저가 MIN>을 사용하여 다음 참조 번호를 반환합니다. 그러나 테이블의 심판 번호는 Varcharint으로 변환 할 때 오류를주는 123GF, 256ER, 25GD와 같은 문자를 포함합니다.

값을 전달 값과 비교하기 전에 비 숫자 숫자를 제거하는 방법은 무엇입니까?

이 내 현재 프로 시저 코드 :

select replace(Ref,'A','') from table --to cut off one char 
select replace(replace(Ref,'A',''),'B','') from table --to cut off A and B char 

: 당신이

enter image description here

다른 솔루션보다 기능을 대체 사용하고 같은 수행의 SQLServer를 사용하는 경우

CREATE PROCEDURE [dbo].nextprevious 
    @refId INTEGER, 
    @Next Bit 
AS 
BEGIN 
    SET NOCOUNT ON; 
    DECLARE @lReturn INTEGER 

    IF(@Next = 1) 
    SELECT REF 
    FROM TABLE 
    WHERE REF =(select MIN(REF) 
    FROM TABLE WHERE REF > @refId)  
    else 
     SELECT REF 
    FROM TABLE 
    WHERE REF =(select MAX(REF) 
    FROM [REF WHERE REF < @refId) 

     SELECT @lReturn = @@ROWCOUNT 
      RETURN @lReturn  
END 
GO 
+0

있습니까? 그것은 당신에게 "다음 행"의 가치를 줄 것입니다. –

+0

은 항상 열의 첫 번째 숫자 값입니까? –

+0

@ t-clausen.dk 예 – Yagzii

답변

0

마찬가지로 귀하의 문자에 대해

+0

이 점을 이해하지 못합니다. 이걸 어디에 두어야합니까? "Stuff"란 무엇인가요? – Yagzii

+0

SP에 값을 전달하는 동안 위와 같이하십시오. Stuff는 SQLServer의 inbuilt 함수입니다. – knkarthick24

+2

코드를 스크린 샷으로 게시하지 마십시오. SQL 문을 (올바르게 형식화 된) 텍스트로 게시하십시오. –

0

표에 계산 된 열을 생성하는 대신 비교를 위해 해당 열을 사용하면`리드()`기능을 인식

ALTER table [tablename] ADD ref_int 
    as CAST(LEFT(REF, PATINDEX('%[^0-9]%', REF + 'x') - 1) AS INT) PERSISTED 
+0

만약? IF Ref 열에는 123GF456LF – knkarthick24

+0

@ knkarthick24와 같은 값이 있습니다. 나는 게시하기 전에 질문했다 –

+0

나는 당신과 완전히 그것에 동의한다. 나는 숫자가 문자열을 가로 질러 퍼지면 같은 것을 성취 할 수있는 다른 간단한 방법이 있는지를 알고 싶다. 그래서 물었다. – knkarthick24

관련 문제