大小写敏感的问题

seemon 2007-10-23 10:01:03
数据库里有一列设置为大小写敏感。
在查询的时候如果使用like '%[ab]%'就可以只得到包含a,b的数据。但是如果写成 like '%[a-b]%', 则将包含A,B的数据也都查询出来了。
请问这是什么原因?
...全文
86 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
seemon 2007-10-23
  • 打赏
  • 举报
回复
可是为什么collate SQL_Latin1_General_CP1_CS_AS却不起作用呢,也同样设置了CS
samfeng_2003 2007-10-23
  • 打赏
  • 举报
回复
CREATE TABLE t
(
ID INT IDENTITY(1,1),
COL VARCHAR(20)
)

INSERT INTO T
SELECT 'abcd' UNION ALL
SELECT 'ABCD' UNION ALL
SELECT 'ABCD'


--Chinese_PRC表示简体中文后跟BIN表示排序规则使用代码页 1252 和二进制排序规则
--CI 指定不区分大小写,CS 指定区分大小写
--AI 指定不区分重音,AS 指定区分重音。
--KS 指定区分假名类型。
--WS表示区分全角和半角
SELECT * FROM t

SELECT * FROM t WHERE COL LIKE '%[A-Z]%' COLLATE Chinese_PRC_BIN

SELECT * FROM t WHERE COL LIKE '%[a-z]%' COLLATE Chinese_PRC_BIN




DROP TABLE t

ID COL
----------- --------------------
1 abcd
2 ABCD
3 ABCD

(所影响的行数为 3 行)

ID COL
----------- --------------------
2 ABCD

(所影响的行数为 1 行)

ID COL
----------- --------------------
1 abcd

(所影响的行数为 1 行)
seemon 2007-10-23
  • 打赏
  • 举报
回复
谢谢,确实能用了。
但是,我使用collate SQL_Latin1_General_CP1_CS_AS却不能起作用。
能解释一下原因吗?
chuifengde 2007-10-23
  • 打赏
  • 举报
回复
like '%[A-Z]%' collate Chinese_PRC_BIN
seemon 2007-10-23
  • 打赏
  • 举报
回复
其实我现在用like '%[ab]% 这样的模式也可以达到目的,只是觉得奇怪为什么like '%[a-b]% '就不对。
seemon 2007-10-23
  • 打赏
  • 举报
回复
fa_ge
不能先用lower,因为我的目的就是为了找出包含小写字母的数据。用了lower以后就不对了。
elvis_gao
sql server是否大小写敏感是可以设置的。
elvis_gao 2007-10-23
  • 打赏
  • 举报
回复
sql是不区分大小写的,like '%[ab]% ' 这种情况也是包含A,B的

declare @a varchar(20)
set @a='11111111aB22222222'
select case WHEN @a LIKE '%[ab]%' THEN '包含A\B' ELSE '不包含' END AS test
/*
test
-------
包含A\B
*/
fa_ge 2007-10-23
  • 打赏
  • 举报
回复
加上upper ,lower 函数

where lower(aa) like '%[a-b]%'
晓风残月0110 2007-10-23
  • 打赏
  • 举报
回复
up

34,576

社区成员

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

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