>

현재 내 조건과 일치하는 레코드를 가져 오려고합니다.

와일드 카드 연산자를 사용하고 있지만 예상대로 레코드를 가져 오지 않습니다.

테이블에 여러 레코드가 있고 아래 쿼리를 사용하고 있습니다 :

select *
from My_table
where RegNum like '117[15-24]%'

위의 쿼리는 11715에서 11724까지의 레코드를 가져올 것으로 생각했지만 현재는 11710에서 11719까지의 레코드를 가져오고 있습니다. % 를 알아야합니다.  와일드 카드 연산자는 한 자릿수 만 고려합니다.

와일드 카드 연산자에서 두 자리 숫자를 사용하는 다른 방법이 있습니까? 아니면 내가 찾고있는 레코드를 가져 오는 다른 솔루션이 있습니까?


  • 답변 # 1

    SQL Server를 사용하고 있다고 추측합니다. 수치 범위를 비교할 때 가장 좋은 방법은 불평등을 사용하는 것입니다. 당신의 RegNum 경우  열은 텍스트입니다. 먼저 정수로 캐스트 한 다음 비교하십시오.

    SELECT *
    FROM My_table
    WHERE (CAST RegNum AS int) BETWEEN 11715 AND 11724;
    
    

    LIKE 를 사용하려면 , 시도해 볼 수 있습니다 :

    SELECT *
    FROM My_table
    WHERE RegNum LIKE '1171[5-9]' OR RegNum LIKE '1172[0-4]';
    
    

  • 답변 # 2

    원하는 논리는 아마도 다음을 통해 더 잘 파악할 수 있습니다 :

    where left(regnum, 5) between '11715' and '11724'
    
    

    일부 데이터베이스가 left() 를 지원하지는 않습니다 그 대신 부분 문자열 함수를 사용하십시오.

    like 를 사용하려는 논리에 오류가 있습니다.  숫자 범위의 경우. 와이즈 비즈  문자열입니다. 숫자 범위를 원하면 숫자를 사용하십시오. 위의 조건 으로이 작업을 수행 할 수 있습니다 :

    like
    
    

    그러나 이것은 원래 문자열 비교와 논리적으로 동일합니다.

    where cast(left(regnum, 5) as int) between 11715 and 11724

관련 자료

  • 이전 Nodejs + Joi 사용자 정의 오류 메시지를 표시하는 방법?
  • 다음 jquery - 인라인 일 때 javascript 변수가 정의되지 않았습니다