내가 읽은 책에서 약간의 코드가 발생하여 SUBSTRING()
함수의 동작을 묻습니다. 이 코드는 NYSIIS Replacement 테이블 (표음 인코딩 예제)을 검색하고 테이블의 'End' 'Mid'또는 'Start'위치를 기반으로 입력 문자열의 중간 'N 그램'을 대체합니다. 발췌가 아래에 제공된다 :T-SQL 하위 문자열() 동작
NYSIIS 교체 테이블 :
Location NGram Replacement Mid A A Mid AW AA Mid E A Mid EV AF Mid EW AA Mid I A
USE [AdventureWorks]
DECLARE @Result NVARCHAR(100) = N'NEVADA';
DECLARE @Replacement NVARCHAR(10);
DECLARE @i INT;
SET @i = 1;
WHILE @i <= LEN (@Result)
BEGIN
SET @Replacement = NULL;
-- Grab the middle-of-name replacement n-gram
SELECT TOP(1) @Replacement = Replacement
FROM dbo.NYSIIS_Replacements
WHERE Location = N'Mid'
AND SUBSTRING(@Result, @i, LEN(NGram)) = NGram
ORDER BY LEN(NGram) DESC;
SET @Replacement = COALESCE(@Replacement, SUBSTRING(@Result, @i, 1));
-- If we found a replacement, apply it
SET @Result = STUFF(@Result, @i, LEN(@Replacement), @Replacement)
-- Move on to the next n-gram
SET @i = @i + COALESCE(LEN(@Replacement), 1);
END;
SELECT @Result;
SUBSTRING()
기능 표에 예를 들어 ('E'와 'EV' '를 NEVADA'를 이용하여 2 가능한 일치를 발견) 2 문자 스트링을 사용하는 것이 어떻게 '알 수 있습니까'? 이것이 SUBSTRING()
의 예상되는 동작입니까?
변수는 'A'와 'AF'를 모두 포함한다고 가정하지만 디버깅 할 때는 첫 번째 반복에서는 'N'을, 두 번째에서는 'AF'만 포함하는 것으로 보입니다.
또한 TOP
및 ORDER BY
이이 예제에 포함 된 이유를 이해할 수 없습니다. 그것들을 주석 처리하는 것은 동일한 결과를 가져온다.
이는 의미가 있습니다. 감사. TOP 또는 ORDER BY가없는 결과는 순서가 매겨지지 않을 것입니다. 비록 내가 실행했을 때마다 2 글자 문자열 만 반환 했었지만 나는 가정하고 있습니다. – voided