In postgresql, I have a case statement that I need to add a "not equals" clause.
When v1 equals v2, I want it to say 1, when v1 DOES NOT EQUAL v2, I would like to say 2.
create table test (
v1 varchar(20),
v2 varchar(20)
);
insert into test values ('Albert','Al'),('Ben','Ben')
select case v1
when v2 then 1
else 3
end
from test
I tried using != or <>, but that does not seem to work.
Does anyone have any idea how to use not equals in a case statement in SQL?
You could always just be more explicit with your case statement. Here's an example...
select
case when v1 = v2 then 1
when v1 <> v2 then 2
end
from test
First, you start by reading the documentation. You'll note that the SQL case function takes one of two forms:
case {expression}
when {value-1} then {result-1}
...
when {value-N} then {result-N}
[ else {default-result} ]
end
or
case
when {boolean-condition-1} then {result-1}
...
when {boolean-condition-N} then {result-N}
[ else {default-result]
end
So, you can say something like
select * ,
case
when v1 = v2 then 1
when v1 != v2 then 2
when v1 is null and v2 is not null then 2
when v1 is not null and v2 is null then 2
else 1 -- both v1 and v2 are null
end as are_equal
from test
Note that
else clause is optional: ifnot specified, the return value from the function for any values not matching a when clause is null, nadnull fails all tests save for explicit tests for nullity via is [not] null, if you need to check for null, you either have to use the 2nd form (... case when x is null then y else z end) or have the null fall through and be handled by an else clause.If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With