关于字符串大小的比较

marine8086 2007-09-03 03:41:26
if ('b0'<'b-')
print '1'

if ('b099999'<'b-99999')
print '1'


为什么两个判断的结果会不一样?
...全文
242 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
welove1983 2007-09-04
  • 打赏
  • 举报
回复
关注... 等高人
feixiangVB 2007-09-04
  • 打赏
  • 举报
回复
是不一樣!關注
wgzaaa 2007-09-04
  • 打赏
  • 举报
回复
-在比较大小时相当于没有这个字符,原因不明,如a-与a是相当的,a-----0与a-0也是相当的
marine8086 2007-09-04
  • 打赏
  • 举报
回复
if ('b0'collate Chinese_PRC_BIN > 'b-'collate Chinese_PRC_BIN)
print 'true 1' -- printed for me

if ('b01' collate Chinese_PRC_BIN > 'b-1' collate Chinese_PRC_BIN)
print 'true 2' -- printed for me
marine8086 2007-09-04
  • 打赏
  • 举报
回复
感谢大家的关注,我试了一下,感觉是和排序规则有关系的。
我做了下面的实验,我的数据库默认的排序规则是Chinese_PRC_CI_AS,但是排序的时候使用不同的排序规则出现了不同的结果。

create table a1(
word varchar(20))

insert into a1 select 'b0'
union all select 'b-'
union all select 'b01'
union all select 'b-1'

select word as 'Chinese_PRC_BIN word' from a1 order by word collate Chinese_PRC_BIN
结果是
Chinese_PRC_BIN word
--------------------
b-
b-1
b0
b01

select word as 'Chinese_PRC_CI_AS word' from a1 order by word collate Chinese_PRC_CI_AS
结果是
Chinese_PRC_CI_AS word
----------------------
b-
b0
b01
b-1

到底为什么Chinese_PRC_CI_AS,要这么排,还没搞明白。
希望大家继续关注。
livan1038 2007-09-03
  • 打赏
  • 举报
回复
我用了SOUNDEX與DIFFERENCE來作測試,結果竟然是一樣
welove1983 2007-09-03
  • 打赏
  • 举报
回复
蹊跷 ...
等高人解释
Limpire 2007-09-03
  • 打赏
  • 举报
回复
似乎有点道理
penglewen 2007-09-03
  • 打赏
  • 举报
回复
感觉好象'b-'中的'-'号当作运算符一样.

你试试这个比较的时候就结果一样if ('b0000000'<'b-000000') 要是添加的数不是0的话,就结果相反了.


还有就是当你把'b-'换成'b_'时,结果也是正确的....所以很有可能是'-'在作怪.只是猜测,等高人来解答.
Limpire 2007-09-03
  • 打赏
  • 举报
回复
我查找了所有的排序规则,结果都是一样的
Limpire 2007-09-03
  • 打赏
  • 举报
回复
关注

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧