WHERE (InCode LIKE 'l%')--查以1开头的所有记录
WHERE InCode >='l' AND InCode<'m'--查介于1到m之间的记录(含1、2...9,a、b、c...l开头的记录)显然不一样!WHERE (InCode LIKE 'l%') 等价于 WHERE left(InCode,1)='l'
WHERE InCode >='l' AND InCode<'m'--查介于1到m之间的记录(含1、2...9,a、b、c...l开头的记录)显然不一样!WHERE (InCode LIKE 'l%') 等价于 WHERE left(InCode,1)='l'
create table #t(
a varchar(10))
insert into #t select 'ladfafd'
insert into #t select 'a123fafd'
insert into #t select 'l31adfafd'
insert into #t select 'lad31fafd'
insert into #t select '2adfafd'
insert into #t select 'madfafd'
insert into #t select 'l12adfafd'--select * from #t select * from #t where a like 'l%'
select * from #t where a>='l' and a<'m'drop table #t
----------
ladfafd
l31adfafd
lad31fafd
l12adfafd(所影响的行数为 4 行)a
----------
ladfafd
l31adfafd
lad31fafd
l12adfafd(所影响的行数为 4 行)
那么
l开头的,肯定就排序在m开头后面
所以>='l' and <'m'
的结果与 like 'l%'
是一样的
与
WHERE InCode >='l' AND InCode<'m'到底一不一样?
在排序规则是大小写敏感的情况下应该是一样的,但是大小写不敏感的情况呢?
有点怀疑,但是还未测试。
后来小二同志给我写了句
SELECT *
FROM M_Wdf_Person
WHERE left(InCode,1)='1'我觉得不错,
不知哪个效率更高一些??
我机子上装的是SQL2000个人版,查询结果好象都一样,大小写也一样
>='l' and <'m'
CREATE TABLE ttt1 (
a [char] (10) COLLATE SQL_Latin1_General_Cp437_CS_AS NULL --注意区分大小写
)
GOinsert ttt1
select 'lllll' as a
union all
select 'lmmmm' as a
union all
select 'Lmmmm' as a
union all
select 'LLLLL' as aselect * from ttt1
where a >= 'l' and a<'m'/*结果4条*/select * from ttt1
where a like 'l%'/*结果2条*/
如果没有索引的话,应该是
SELECT *
FROM M_Wdf_Person
WHERE InCode >='l'AND InCode<'m'好一些?
是不是这个意思??
因为M_Wdf_Person
是需要频繁的修改的,我没建索引
SELECT *
FROM M_Wdf_Person
WHERE InCode >='l'AND InCode<'m'
--如果要防止排序规则的影响,可以强制指定排序规则不区分大小写:
SELECT *
FROM M_Wdf_Person
WHERE InCode collate Chinese_PRC_CI_AS >='l'AND InCode collate Chinese_PRC_CI_AS <'m'
是从"l"到"m"的记录!
不知道你看过执行计划没有,在有索引的情况下where a like 'l%'会自动转化成where a >= 'L' and a<'M'执行,也就是说效率是一样的, 在没有索引的情况下,没有做转换,个人认为,where a >= 'L' and a<'M'执行速度比like 快