2014-10-16 3 views
0

if 문에서 문자열을 비교하는 데 문제가 있습니다. 나는이 프로그램을 실행할 때이 if 문이 실패하는 이유는 무엇입니까?

declare @old varchar(max), @manual varchar(max) 
set @old = (select ruledef from roolz where ruleid = 1234) 
set @manual = 'String responseDate = subject.getField("Response Due Date");' + char(10) 
    + 'if (responseDate != null && responseDate .trim().length() > 0) {' + char(10) 
    + ' Map params = new HashMap();' + char(10) 
    + ' params.put("Response Due Date",responseDate);' + char(10) + char(10) + 
    + 'ruleUtil.launchActivity(subject,"PCT-RESP",params,"Launch_PCTRESP",false);' + char(10) 
    + char(10) + '}' + char(10) 
print @manual 
print @old 
--if (@old like '%' + @manual + '%') 
if (@old = @manual) 
begin 
    print 1; 
end 

이는 @old@manual이 동일한 지 보여주는 다음과 같은 출력합니다 :

String responseDate = subject.getField("Response Due Date"); 

if (responseDate != null && responseDate .trim().length() > 0) { 
    Map params = new HashMap(); 
    params.put("Response Due Date",responseDate); 

    ruleUtil.launchActivity(subject,"PCT-RESP",params,"Launch_PCTRESP",false); 
} 

String responseDate = subject.getField("Response Due Date"); 

if (responseDate != null && responseDate .trim().length() > 0) { 
    Map params = new HashMap(); 
    params.put("Response Due Date",responseDate); 

    ruleUtil.launchActivity(subject,"PCT-RESP",params,"Launch_PCTRESP",false); 
} 

그러나 문이 실패한 경우를 의미 하나를 인쇄하지 않습니다이 내가 가진 것입니다. 또한

if (@old like '%' + @manual + '%') 

을 시도하고 여전히 1.

사람이 왜 if 문이 실패 말해 줄 수 인쇄하지 않는 이유는 무엇입니까?

+0

왜 아래 표를 보냅니 까? –

+2

모든 것은 하나의 문자가 다르기 때문에 인쇄되지 않는 문자 ('LF' 대'CR/LF'?)이거나 양쪽 문자열의 공백과 비슷하지만 보이지 않는 문자 일 수 있습니다. 차이를 찾을 때까지 문자 단위로 반복합니다. –

+0

여기에 쓰여진 문자열은 실제로 동일합니다. 나는 확인했다. 스택 오버플로에 붙여 넣을 때 뭔가가 손실되었을 수 있습니다. 어쩌면 줄 바꿈과 캐리지 리턴 ('char (10)'과'char (13)')의 다른 조합을 시도 할 것인가? –

답변

0

해결책을 찾지 못했습니다. 줄 바꿈을 고려하고 있었지만 탭 문자는 고려하지 않았습니다. 줄 바꿈 문자와 탭 문자를 이스케이프 처리하여 정상적으로 작동합니다. @D Stanley 덕분에 다른 캐릭터에 대한 생각의 방향으로 나를 가리켜주었습니다.

0

테스트가 실패 내가 왜 당신을 말할 수는 없지만, 오히려 그것을보고 및 난처한 상황에 빠진되지 않고 테스트를 발굴하는 경우 하나의 당신이있어 왜, 당신은 밤은 작업 당신을 변경할 수 있습니다 :

if (@old = @manual) print 1;  --this one obviously won't happen 
if (substring(@old, 1, 100) = substring(@manual, 1, 100)) print 2; 
if (len(@old) = len(@manual) print 3; 
if (ltrim(rtrim(@old)) = ltrim(rtrim(@manual))) print 4; 
etc 
관련 문제