ID가있는 임시 테이블이 두 개 있습니다.문자열에서 한 번에 한 문자 씩 오른쪽에서 일치 항목이 발견 될 때까지 제거합니다.
#Master 테이블은 한 시스템에서 가져오고 #Extended 테이블은 사람들이 Id에 문자를 추가 한 다른 시스템의 테이블입니다.
지금 문제는 SELECT
쿼리를 작성하여 일치하는 항목이 있는지 확인하거나 일치하는 항목이있을 때까지 한 번에 하나의 문자를 제거하지 않을 것인지 확인하는 것입니다. 아래에서 볼 수 있듯이 정확히 일치하지 않을 경우 가능한 값 중 하나 (1-12L7QABC는 1-12L7QO 또는 1-12L7QM을 반환 할 수 있음)를 반환하고자하는 경우가 있습니다.
CREATE TABLE #Master(Id nvarchar(15), ClientName nvarchar(35));
INSERT INTO #Master
VALUES('1-12L7QO', 'John Citizen'),
('1-12L7QM', 'Steve Smith'),
('1-10YL', 'Sarah Connor'),
('1-2CN9WN', 'Cathy Rodgers');
CREATE TABLE #Extended(ExtId varchar(15));
INSERT INTO #Extended
VALUES('1-12L7QO`'),
('1-12L7QABC'),
('1-10YL'),
('1-12L7QMTest');
예상 출력은 다음과 같습니다
+---------------+---------------+-----------------------------------+
| Id | BaseId | Name |
+---------------+---------------+-----------------------------------+
| 1-12L7QO` | 1-12L7QO | John Citizen |
| 1-12L7QABC | 1-12L7QO | John Citizen |
| 1-10YL | 1-10YL | Sarah Connor |
| 1-12L7QMTest | 1-12L7QM | Steve Smith |
+---------------+---------------+-----------------------------------+
힌트 ... Master.ID + '%'또는 일부 변형과 같이 확장 .ID를 사용하십시오. 각 CHARINDEX에 대한 루핑은 작업 기반으로 설정되지 않으므로 퍼지 일치 및 FULL TEXT 인덱싱으로보다 잘 처리됩니다. – scsimon