CASE
WHEN ' 1a' = ' 1a '
THEN 'EQUAL - but it isn´t- HELP!!!!' ELSE 'UNEQUAL'
END
from dual;
任何人都可以帮助我,向我解释为什么 DB 说这些
2个字符串是一样的
' 1a' = ' 1a '
我已经尝试了很多语句,但我找不到原因。我也在 Oracle 11g 的规范中进行了搜索,但没有任何类似的解释。
最佳答案
因为 Oracle 将您的字符串文字转换为 CHAR;由于 CHAR 是固定长度的,它必须将较短的字符串扩展到正确的长度,因此添加了空格。
改为尝试 VARCHAR2:
SELECT
CASE
WHEN cast(' 1a' as varchar2(100)) = cast(' 1a ' as varchar2(100))
THEN 'EQUAL - but it isn´t- HELP!!!!' ELSE 'UNEQUAL'
END
from dual;
编辑:示例说明 CHAR(10) 和 VARCHAR2(10) 之间的区别
declare
l_char1 char(10) := '1';
l_char2 char(10) := '1 ';
l_varchar1 varchar2(10) := '1';
l_varchar2 varchar2(10) := '1 ';
begin
if l_char1 = l_char2 then
dbms_output.put_line('char equal');
else
dbms_output.put_line('char NOT equal');
end if;
if l_varchar1 = l_varchar2 then
dbms_output.put_line('varchar equal');
else
dbms_output.put_line('varchar NOT equal');
end if;
end;
关于string - SQL 比较字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12055700/