加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL比较字符串

发布时间:2020-12-12 07:03:58 所属栏目:MsSql教程 来源:网络整理
导读:CASE WHEN ' 1a' = ' 1a 'THEN 'EQUAL - but it isn′t- HELP!!!!' ELSE 'UNEQUAL'END from dual; 任何人都可以帮助我,向我解释为什么DB会说这些 2个字符串是相同的 ' 1a' = ' 1a ' 我已经尝试了很多陈述,但我找不到原因.我在Oracle 11g的规范中也进行了搜索
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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读