Oracle SQL - 字符串不等于

时间:2011-11-06 19:37:28

标签: sql string oracle

我在Oracle SQL中有一个触发器。

CREATE OR REPLACE TRIGGER test
BEFORE INSERT ON SomeTable
FOR EACH ROW
    DECLARE str1 VARCHAR(30);
            str2 VARCHAR(30);
    BEGIN
        -- some code
        IF ( str1 <> str 2 ) THEN
            DBMS_OUTPUT.PUT_LINE( ' if ' );
        ELSE
            DBMS_OUTPUT.PUT_LINE( ' else ' );
        END IF;
    END;

现在,这总是转到else语句,即使字符串肯定不相等。我尝试使用!=而不是&lt;&gt;结果相同。但是,如果我只是使用

,它的工作方式相反
IF ( str1 = str2 ) THEN ... ELSE ... END If;

那么测试两个不相等的字符串的正确方法是什么(在Oracle中)?

3 个答案:

答案 0 :(得分:5)

您能告诉我们使用的实际值吗? 上述行为的原因可能是其中一个值为null?

如果str1和str2可能有空值,那么你的if应该是......

IF (str1 is null and str2 is null) then
   <statments depending on whether you want to treat nulls as equal>
else if (
   (str1 is null and str2 is not null) or
   (str2 is null and str1 is not null) or
   (str1 <> str2)) then
  <statements when str1 and str2 are not equal>
else
  <statements when str1 and str2 are equal?
end if;

答案 1 :(得分:0)

这应该确定一个字符串是否存在于另一个字符串中:

IF instr(str1,str2)<>0 THEN

答案 2 :(得分:0)

有时候否定平等条件会更容易。例如。如果不相等(val1,val2);

function equals(
  val1 varchar2,
  val2 varchar2
) return boolean is
begin
  if val1 is null then
    return val2 is null;
  elsif val2 is null then
    return false;
  end if;

  return val1 = val2;
end;

在您的代码中,您将拥有:

BEGIN
    -- some code
    IF NOT equals(str1, str2) THEN
        DBMS_OUTPUT.PUT_LINE( ' if ' );
    ELSE
        DBMS_OUTPUT.PUT_LINE( ' else ' );
    END IF;
END;