문자열을 비교할 때 마지막 문자를 무시 : 비교할 때내가 비교하려는 문자열을 다음 한
DECLARE @a VARCHAR(20), @b VARCHAR(20)
SET @a = '05Y2203-B10'
--SET @a = '05Y2203-B10B'
SET @b = '05Y2203-B10C'
, 나는 마지막 문자를 무시해야하지만, -
후 문자열의 길이가 4 인 경우에만.
'05Y2203-B10B' --ignore the 'B'
'05Y2203-B10' --do not ignore the '0'
몇 가지 예 :
'05Y2203-B10B' = '05Y2203-B10B' --match
'05Y2203-B10B' = '05Y2203-B10C' --match
'05Y2203-B10' = '05Y2203-B10B' --match
'05Y2203-B10' = '05Y2203-B11' --no match
'05Y2203-B10' = '18G9987-B10' --no match
문자열은 항상 같을 것 다음 패턴 중 하나입니다.
-
이전의 부분 문자열 길이는 다를 수 있습니다.
SELECT 1
WHERE CASE WHEN LEN(SUBSTRING(@a, CHARINDEX('-', @a) + 1, 4)) = 4
THEN SUBSTRING(@a, 1, LEN(@a) - 1)
ELSE @a
END
=
CASE WHEN LEN(SUBSTRING(@b, CHARINDEX('-', @b) + 1, 4)) = 4
THEN SUBSTRING(@b, 1, LEN(@b) - 1)
ELSE @b
END
이 작동하지만 쿼리에 더 많은 조건이 특히, 매우 읽기 아니다 :
지금까지 나는이 해결책을 가지고 있습니다.
이 문제에 대한 좀 더 간단하고 세련된 해결책이 있습니까? 난 당신이, 더 읽기 (유지 보수) 쿼리를 원하는 알고있는 것처럼
첫 번째 부분 ('-' 이전)은 어떨까요? 고정 길이입니까? –
'-'이전의 길이가 다를 수 있습니다. – NePh
더 우아한 방법은 물론 더 좋은 테이블 디자인이 될 것입니다 :-) '05Y2203-B10'이 코드이고 'B'가 선택적인 확장 인 경우이 코드는 연결된 코드를 포함하는 하나의 열이 아니라 두 개의 개별 열이어야합니다 '05Y2203-B10B'. –