2014-10-16 5 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); 
} 

Но это не печатает 1 означает, если заявление не удалось. Я также попытался

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

и он по-прежнему не печатает 1.

Может кто-нибудь сказать мне, почему это, если заявление не удается?

+0

Почему голос? –

+2

Все, что требуется, - это один символ, который может быть другим - это может быть непечатаемый символ ('LF' vs' CR/LF'?) Или символ, который _looks_, как пространство в обеих строках, но это не так. Я бы зацикливал по-характеру, пока не найдет разницу. –

+0

Строки, написанные здесь, на самом деле одинаковы; Я проверил. Возможно, что-то было потеряно, когда они были вставлены в Stack Overflow. Возможно, попробуйте различные комбинации разрывов строк и возврата каретки ('char (10)' и 'char (13)')? –

ответ

0

В итоге я нашел решение. Я принимал во внимание разрывы строк, но я не принимал во внимание символы табуляции. Я избежал разрывов строк и символов табуляции, и он работает так, как должен. Спасибо @D Стэнли за то, что он указал мне на мысли о других персонажах.

0

Я не могу сказать вам, почему тест не удается, а не смотреть на него, и будучи поставлен в тупик, Вы можете изменить свой IF тест выкопать почему один у вас есть Isnt работы:

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 
Смежные вопросы