2011-04-28 3 views
1

ID 열이있는 table1과 ID 번호 열이있는 table2가 있습니다. 예를 들어 ID 형식은 "aac557z"입니다. 나는 그 ID의 숫자를 숫자로 비교하고 싶다. 표 :SQL : 두 단어를 어떻게 조각으로 비교합니까?

enter image description here

그리고 표 2는 :

enter image description here

나는 단어의 조각이 열 ID에 "567"이다 표에서 행을 선택합니다. 번호는 다를 수 있습니다. 누군가가 아이디어를 갖고있을 수 있습니까? MS Access 2010을 사용 중입니다. 미리 감사드립니다.

+1

자릿수가 독립적 인 의미를 갖고 있다는 사실은 필드가 부적절하게 설계되었음을 나타냅니다. 이것을 제어 할 수는 없지만 그렇게 할 수 있다면이 필드를 최소한 두 개의 개별 필드 (및 세 개의 필드)로 분할해야합니다. –

답변

1

ID의 숫자 부분이 항상 같은 위치에 있고 길이가 같은 경우 MID 함수를 사용하여 비교할 숫자 부분을 가져올 수 있습니다. 그것은 큰 테이블에서 매우 빠르지 않을 것입니다. 여기

구문에 대한 링크입니다 : http://office.microsoft.com/en-us/access-help/mid-function-HA001228881.aspx

당신이 삽입 될 때 종종 테이블에 다른 필드를 추가하고 ID의 숫자 부분을 채우기 위해 더 좋을 수도이 비교 작업을 수행하려는 경우 테이블에. 그런 다음 해당 필드를 사용하여 쿼리를보다 빠르게 수행해야합니다.

+0

그게 내 문제를 해결, 고마워. – Juronis

0

사용자 정의 함수를 사용하여 ID에서 숫자 부분을 추출한 다음 나머지 부분은 매우 사소합니다.

CREATE FUNCTION ExtractInteger(@String VARCHAR(2000)) 
RETURNS VARCHAR(1000) 
AS 
BEGIN 
DECLARE @Count INT 
DECLARE @IntNumbers VARCHAR(1000) 
SET @Count = 0 
SET @IntNumbers = '' 

WHILE @Count <= LEN(@String) 
BEGIN 
IF SUBSTRING(@String,@Count,1) >= '0' 
AND SUBSTRING(@String,@Count,1) <= '9' 
BEGIN 
SET @IntNumbers = @IntNumbers + SUBSTRING(@String,@Count,1) 
END 
SET @Count = @Count + 1 
END 

RETURN @IntNumbers 
END 

그리고 비교,이 같은 :

SELECT * from TABLE1 
JOIN TABLE2 
    on dbo.ExtractInteger(TABLE1.ID) = dbo.ExtractInteger(Table2.ID) 

테이블이 매우 큰 경우,이 비싼 될 것입니다 여기에

일을 할 수있는 기능입니다 질문!

+0

Access 2010에서 SQL CREATE FUNCTION을 사용할 수 있습니까? – Tony

관련 문제