string - SQL 比较字符串

标签 string oracle oracle11g compare case-statement

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/

相关文章:

performance - Oracle 全部插入与插入

c++ - 如何使用 OCCI 中的 setDataBuffer 进行数组提取

c++ - 打印字符串数组的第一个/最后一个元素时出现问题

c# - 动态正则表达式生成,用于数据馈送中可预测的重复字符串模式

java - = java中的运算符

java - SQL预编译语句

Oracle RAC VIP 和 SCAN IP

java - 确定用户输入的字符串格式是否正确

java - Dbunit 获得 AmbigouslyTableNameException Oracle

oracle - 在 Oracle Apex 上,如何使用免费版本在同一工作区上创建多个数据库架构