2016-10-21 2 views
1

입력으로 @subno을 사용하고 있습니다. 그리고 홀수와 짝수를 찾아야했습니다. 16은 수정 사항이 아니며 다른 숫자 일 수 있습니다. 제 질문은 홀수와 짝수의 입력을 찾는 방법입니다.SQL Server 저장 프로 시저 : 홀수 및 홀수 값 찾기

마지막으로, subno는 임의의 위치에 점 (.)을 포함합니다. 예 : 123456.789123 "123456"의 홀수 및 짝수를 찾고 도트 (.)가 구분 기호 인 "789123"의 홀수 및 짝수를 찾아야합니다.

왼쪽에 대해 홀수를 찾았 으면 함께 정리하십시오. 일단 왼쪽에 대한 짝수를 찾으면 그것을 합계 한 다음 총 홀수 값을 총 짝수 값에 더하십시오. 그것은 오른쪽면에서도 마찬가지입니다. 예 : "789123".

도와주세요. 이것은 해결책을 찾기위한 제 2 주입니다. 각면에 대한 모든 합계 값을 찾으면 함께 곱하십시오. 예 : "123456"- 홀수 및 짝수의 합계 값 * 홀수 및 짝수의 "789123"합계 값.

수표 유효성 확인을위한 것입니다. 구독자 번호 확인 중. 계산을 통해 유효성을 확인한 후에는 계산 된 참조 x 호를 올 Y 른 검사. 자 수와 일치시켜야합니다. 그것은 비즈니스 규칙입니다. 알고리즘

create procedure ProcedureName 
    (@subno VARCHAR(16), --Input the 16 subscriber number 
    @result INT OUT, 
    ) 
as 
begin 
    IF(LEN(@subno) <> 16) 
     SET @result = 1 -- INVALID RESULT 
    ELSE 
     IF(@subno % 2 = 0) 
      SET @result = @subno - even numbers 
     ELSE 
      SET @result = @subno --odd numbers 
end 

의 종류는 내 샘플 작업

-- this is the sample 

create procedure ProcedureName 
(
@subno VARCHAR(20), --Subscriber no 
@result INT OUT,  --result is invalid for 1, valid for 0 
@payamt int 
) 
as 

DECLARE @WA VARCHAR(2) 
DECLARE @Weights varchar(9) 
DECLARE @I INT 
DECLARE @WD INT 
DECLARE @WP INT 
DECLARE @A INT 
DECLARE @B INT 
DECLARE @R INT 
DECLARE @WR INT 

SET @WR = 0 
SET @R = 0 
SET @A = 0 
SET @B = 0 
SET @WP = 0 
SET @I = 0 

BEGIN 

IF (LEN(@subNo) = 7) AND (SUBSTRING(@subno,1,1) = '2') OR (SUBSTRING(@subno,1,1) = '9') 
    BEGIN 
     SET @result = 0 --VALID 
    END 
ELSE IF(LEN(@subno) = 8) AND (SUBSTRING(@subno,1,1) = '2') OR 
(SUBSTRING(@subno,1,1) = '9') 
    BEGIN 
     SET @result = 0 --VALID 
    END 
ELSE IF(LEN(@subno) = 9) 
BEGIN 
    SET @WA = SUBSTRING(@subno,1,2) 
     IF(@WA = '65') 
      set @result = 1 -- INVALID 
     else 
     BEGIN 
     SET @Weights = '12121212' 
     SET @WA = SUBSTRING(@subno,9,1) 
     SET @WD = 0 
     SET @I = 1 
     WHILE @I<9 
     BEGIN 
      SET @WP = cast(SUBSTRING(@Weights, @I,1)as int) * cast(SUBSTRING(@subno, @I, 1) as int) 
      IF(@WP > 9) 
      BEGIN 
       SET @A = SUBSTRING(CAST(@WP AS VARCHAR),1,1) 
       SET @B = SUBSTRING(CAST(@WP AS VARCHAR),2,1) 
       SET @WP = CAST(@A AS INT) + CAST(@B AS INT) 
      END 

      SET @WD = @WP + @WD 
      SET @I = @I + 1 
     END 

     SET @R = @WD % 10 

     IF(@R <> 0) 
      SET @WR = 10 - @R 
     ELSE 
      SET @WR = @R 

     IF(@WR <> CAST(@WA AS INT)) 
     BEGIN 
      SET @result = 1 -- INVALID 
     END 
     ELSE 
     BEGIN 
      SET @result = 0 -- VALID 
     END 
    END 
END 
ELSE IF (LEN(@subno) = 10) 
BEGIN 
    SET @I =1 
    SET @WD = 0 
    SET @Weights = '121212121' 
    SET @WA = SUBSTRING(@subno,10,1) 
    WHILE(@I < 10) 
    BEGIN 
     SET @WP = CAST(SUBSTRING(@Weights, @I, 1)AS INT) * CAST(SUBSTRING(@subno, @I, 1) AS INT) 
     IF(@WP > 9) 
     BEGIN 
      SET @A = SUBSTRING(CAST(@WP AS VARCHAR),1,1) 
      SET @B = SUBSTRING(CAST(@WP AS VARCHAR),2,1) 
      SET @WP = CAST(@A AS INT) + CAST(@B AS INT) 
     END 

     SET @WD = @WP + @WD 
     SET @I = @I + 1 
    END 

    SET @R = @WD % 10 

    IF(@R <> 0) 
     SET @WR = 10 - @R 
    ELSE 
     SET @WR = @R 

    IF (@WR<> @WA) 
    BEGIN 
     SET @result = 1 -- INVALID 
    END 
    ELSE 
    BEGIN 
     SET @result = 0 -- VALID 
    END 
END 
ELSE 
    SET @result = 1 -- INVALID 
END 
+0

질문을 편집하고 절차 및 예상 결과를 어떻게 부르는 지 보여주십시오. –

+0

안녕하세요, 편집을 완료했습니다. – Mikelemuel

+0

이것은 단순히 의미가 없습니다. "나는"123456 "의 홀수 및 짝수와"789123 "의 홀수 및 짝수를 찾아야합니다. ' –

답변

0

분할 u는 얻을 값 아래를 참조하시기 바랍니다. 그런 다음 각면을 반복하여 추가하십시오. 아래 샘플을 참조하십시오.

declare @v varchar (16) , @num1 varchar(20) , @num2 varchar(20) 
set @v = '1234567.78906656' 

select @num1 = substring(@v,0,charindex('.',@v)) 

select @num2 = substring(@v,charindex('.',@v)+1,len(@v)) 
--select @num1 = convert(int, substring(@v,0,charindex('.',@v))) 
--select @num2 = substring(@v,charindex('.',@v)+1,len(@v)) 
declare @index int = 1 ,@len INT , @char CHAR 
declare @TotalOddL int = 0 
declare @TotalEvenL int = 0 
DECLARE @FullTotL INT = 0 
declare @TotalOddR int = 0 
declare @TotalEvenR int = 0 
DECLARE @FullTotR INT = 0 
DECLARE @TEMP INT 
set @len= LEN(@num1) 



WHILE @index <= @len 
BEGIN 
set @char = SUBSTRING(@num1, @index, 1) 
SET @TEMP = cast(@char as int) 
IF(@TEMP % 2 = 0) 
    SET @TotalEvenL = @TotalEvenL + @char 
    else 
    SET @TotalOddL = @TotalOddL + @char 

    SET @FullTotL = @TotalEvenL + @TotalOddL 


SET @index= @index+ 1 
END 

Select 'LeftSide total' , @FullTotL 
Select 'Left Side odd' , @TotalOddL 
Select 'Left Side Even' , @TotalEvenL 

SET @index = 1 
set @len= LEN(@num2) 
WHILE @index <= @len 
BEGIN 
set @char = SUBSTRING(@num2, @index, 1) 
SET @TEMP = cast(@char as int) 
IF(@TEMP % 2 = 0) 
    SET @TotalEvenR= @TotalEvenR + @char 
    else 
    SET @TotalOddR = @TotalOddR + @char 

    SET @FullTotR = @TotalEvenR + @TotalOddR 

SET @index= @index+ 1 
END 


select 'TotalRSide' , @FullTotR 
select 'RsideOdd' , @TotalOddR 
select 'RSideEven' , @TotalEvenR 

select 'Multiplied value' , @FullTotR * @FullTotL 
+0

이걸 시도 했나요? – FakeisMe

+0

이 코드는 동일합니다. 즉, 홀수 및 짝수와는 아무런 관련이 없습니다. declare @v varchar (16) = '1234567.78906656'; 'TotalSend total', len (하위 문자열 (@ v, 0, + l, len (@v))) len (하위 문자열 (@ v, charindex ('.', len (@v))' , @ v))) –

+0

@FakeisMe 나는 여전히 지금 내 코드를 사용하려고 노력 중이다. 내가 끝내 자마자 곧 다시 너에게 갈거야. 고맙습니다. – Mikelemuel