Delphi中字符串比较大小 VS Oracle-SQL中字符串比较大小

重点注意Delphi和Oracle-SQL中比较字符串时空字符串”的根本性的不同

Delphi中的字符串比较

  • Delphi中字符串比较大小的规则:对应位置的字符按照字符编码值逐个对比,直到遇到可以确定大小关系的就结束比较

  • 参考《Delphi的Ord函数和ASCII码对照表》

  • 常见的一些字符的字符编码

    • ‘0’对应字符编码48;’1’对应字符编码49。’2’、’3’、……、’9’依次递增

    • ‘A’对应字符编码65。’B’、’C’、……’Y’、’Z’依次递增

    • ‘a’对应字符编码97。’b’、’c’、……’y’、’z’依次递增

    • ‘ ‘对应字符编码32,注意是空格,而不是空字符串

  • 比如’abcd’ 和 ‘abd’比较

    • 首先第一位’a’和’a’比较,一样,继续下面的比较

    • 接着第二位’b’和’b’比较,一样,继续下面的比较

    • 接着第三位’c’和’d’比较,’c'<‘d’,所以’abcd'<‘abd’,结果出来!比较结束

  • 列举出常见的比较

    • ‘101’<’12’为True

    • ‘101’<‘102’为True

    • ‘abcd’>’abc’为True,这个需要注意

    • ‘12345’>’1234’为True,这个需要注意

    • ‘1’>”,在Delphi中任意非空字符串都大于空字符串”

可以自己在Delphi中编程试一下

procedure TForm1.btn1Click(Sender: TObject);
begin
//这里面的四种比较都是True,所以都会弹出框
  if '123'>'12' then
    ShowMessage(' ''123''>''12'' ');
  if 'abcd'>'abc' then
    ShowMessage(' ''abcd''>''abc'' ');
  if '1'>'' then
    ShowMessage(' ''1''>'''' ');
  if '102'>'10' then
    ShowMessage(' ''102''>''10'' ');
end;

Oracle SQL中的字符串比较

  • 亲自在Oracle中验证过!

  • 一般在SQL中的where条件中会用到字符串的比较,比如select * from user where name > ‘john’

  • 首先特别注意”,和Delphi有一个很大的不同

    • 任何字符串都不能和”进行比较,因为比较结果既不为True也不为False

    • 如果在select的where判断中有和”的比较会导致选不出任何一条记录

  • 除了小心”之外,其余同Delphi:对应位置的字符按照字符编码值逐个对比,直到遇到可以确定大小关系的就结束比较

  • 几种常见的字符对应的编码

    • select ascii(‘1’) from dual; 字符编码值 49

    • select ascii(‘A’) from dual; 字符编码值 65

    • select ascii(‘a’) from dual; 字符编码值 97

    • select ascii(‘ ‘) from dual; 字符编码值 32

  • 列举出常见的比较

    • ‘abcd’>’abc’为True,和Delphi中一样

    • ‘12345’>’1234’为True,和Delphi中一样

  • 其他的数据库的相关规则目前还没有试过,比如MySQL、SQLite……

    原文作者:xumenger
    原文地址: https://segmentfault.com/a/1190000004937809
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞