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:
请尝试使用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;
原文地址:https://www.jb51.cc/mssql/77064.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。