집 >데이터 베이스 >MySQL 튜토리얼 >T-SQL에서 문자열을 분할할 때 누락된 구분 기호를 처리하는 방법은 무엇입니까?
T-SQL 문자열 분할: 누락된 구분 기호 해결
일관되지 않은 구분 기호가 있는 데이터에는 구분 기호 누락 시나리오를 강력하게 처리해야 합니다. 일반적인 문제를 살펴보겠습니다.
FirstName/LastName
형식으로 이름을 저장하는 "Name" 열이 있는 테이블("MyTable")을 상상해 보세요. 그러나 일부 항목에는 '/' 구분 기호가 없을 수 있습니다.
<code>FirstName---LastName John--------Smith Jane--------Doe Steve-------NULL -- Missing delimiter Bob---------Johnson</code>
이와 같은 순진한 SUBSTRING
및 CHARINDEX
접근 방식은 구분 기호가 없으면 실패합니다.
<code class="language-sql">SELECT SUBSTRING(Name, 1, CHARINDEX('/', Name)-1) AS FirstName, SUBSTRING(Name, CHARINDEX('/', Name) + 1, 1000) AS LastName FROM MyTable;</code>
"LEFT 또는 SUBSTRING 함수에 전달된 잘못된 길이 매개변수" 오류는 CHARINDEX
에서 구분 기호를 찾을 수 없을 때 0을 반환하여 음수 하위 문자열 길이가 발생하기 때문에 발생합니다.
해결책: 조건부 하위 문자열 추출
해결책에는 하위 문자열 길이를 조건부로 결정하는 CASE
문이 포함됩니다.
<code class="language-sql">SELECT SUBSTRING(Name, 1, CASE WHEN CHARINDEX('/', Name) = 0 THEN LEN(Name) ELSE CHARINDEX('/', Name) - 1 END) AS FirstName, SUBSTRING(Name, CASE WHEN CHARINDEX('/', Name) = 0 THEN LEN(Name) + 1 ELSE CHARINDEX('/', Name) + 1 END, 1000) AS LastName FROM MyTable;</code>
이 세련된 쿼리는 CASE
을 사용하여 두 시나리오를 모두 처리합니다.
CHARINDEX('/') = 0
): FirstName
의 하위 문자열 길이는 전체 문자열 길이(LEN(Name)
)가 되고, LastName
하위 문자열은 끝에서 한 문자 뒤의 위치에서 시작됩니다. 문자열(LEN(Name) 1
), 효과적으로 NULL
을 반환합니다.SUBSTRING
로직이 적용됩니다.이 강력한 접근 방식은 구분 기호 유무에 관계없이 올바른 결과를 보장하여 "잘못된 길이 매개변수" 오류를 방지합니다.
위 내용은 T-SQL에서 문자열을 분할할 때 누락된 구분 기호를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!