T-SQL中大小写区分问题

时间:2021-07-26 00:48:47
因为在sql中,sql语句是不区分大小写的,所以如何查找出大写记录或小写记录呢?
例如:Temp表中A列为商品名称,请写出查询以大写字母开头的所有商品名称的T-SQL语句

15 个解决方案

#1


通过指定排序规则,就可以 Chinese_PRC_CS_AS,其中的cs表示 大小写敏感

create table temp(prod_name nvarchar(100))

insert into temp
select 'a' union all
select 'A' 


select *
from temp
where prod_name  = 'a' collate Chinese_PRC_CS_AS 
/*
prod_name
a
*/

#2



create table Temp(id int,A varchar(10))

insert into Temp(id,A)
 select 1,'Book' union all
 select 2,'pen' union all
 select 3,'Phone' union all
 select 4,'Bag' union all
 select 5,'paper'


select id,A from Temp 
 where ascii(left(A,1)) between ascii('A') and ascii('Z')
 
/*
id          A
----------- ----------
1           Book
3           Phone
4           Bag

(3 row(s) affected)
*/

#3


抛弃效率的话,用UPPER()函数来试试

#4


很奇怪,我用like '[A-Z]%' collate Chinese_PRC_CS_AS 也无法实现这个需求

#5


标准答案给的是
SELECT A FROM Temp
WHERE A LIKE  '[A-Z]% '

试了以后查询结果并没有区分大小写,就很迷惑

#6


引用 5 楼 u012978850 的回复:
标准答案给的是
SELECT A FROM Temp
WHERE A LIKE  '[A-Z]% '

试了以后查询结果并没有区分大小写,就很迷惑


我也试了一下,这个WHERE A LIKE  '[A-Z]% ' 确实有点问题,加上了排序规则,也还是不行。

对了,你有标准答案?

#7


引用 2 楼 ap0405140 的回复:

create table Temp(id int,A varchar(10))

insert into Temp(id,A)
 select 1,'Book' union all
 select 2,'pen' union all
 select 3,'Phone' union all
 select 4,'Bag' union all
 select 5,'paper'


select id,A from Temp 
 where ascii(left(A,1)) between ascii('A') and ascii('Z')
 
/*
id          A
----------- ----------
1           Book
3           Phone
4           Bag

(3 row(s) affected)
*/
T-SQL中大小写区分问题T-SQL中大小写区分问题T-SQL中大小写区分问题

#8


引用 6 楼 yupeigu 的回复:
Quote: 引用 5 楼 u012978850 的回复:

标准答案给的是
SELECT A FROM Temp
WHERE A LIKE  '[A-Z]% '

试了以后查询结果并没有区分大小写,就很迷惑


我也试了一下,这个WHERE A LIKE  '[A-Z]% ' 确实有点问题,加上了排序规则,也还是不行。

对了,你有标准答案?

是一个教数据库的老师写的答案,显然,他的答案并不正确

#9


引用 8 楼 u012978850 的回复:
Quote: 引用 6 楼 yupeigu 的回复:

Quote: 引用 5 楼 u012978850 的回复:

标准答案给的是
SELECT A FROM Temp
WHERE A LIKE  '[A-Z]% '

试了以后查询结果并没有区分大小写,就很迷惑


我也试了一下,这个WHERE A LIKE  '[A-Z]% ' 确实有点问题,加上了排序规则,也还是不行。

对了,你有标准答案?

是一个教数据库的老师写的答案,显然,他的答案并不正确


呵呵,老师嘛,可能理论比较强,但是实践不一定强,还有就是这个我觉得有点像是sql server 的bug,很奇怪

#10


引用 2 楼 ap0405140 的回复:


select id,A from Temp 
 where ascii(left(A,1)) between ascii('A') and ascii('Z')

大神的答案是对的,可是查询这部分我还是有点不理解

#11


引用 9 楼 yupeigu 的回复:
Quote: 引用 8 楼 u012978850 的回复:

Quote: 引用 6 楼 yupeigu 的回复:

Quote: 引用 5 楼 u012978850 的回复:

标准答案给的是
SELECT A FROM Temp
WHERE A LIKE  '[A-Z]% '

试了以后查询结果并没有区分大小写,就很迷惑


我也试了一下,这个WHERE A LIKE  '[A-Z]% ' 确实有点问题,加上了排序规则,也还是不行。

对了,你有标准答案?

是一个教数据库的老师写的答案,显然,他的答案并不正确


呵呵,老师嘛,可能理论比较强,但是实践不一定强,还有就是这个我觉得有点像是sql server 的bug,很奇怪

对啊,按理说单引号里的内容是区分大小写的,但就是查不出来

#12


引用 11 楼 u012978850 的回复:
Quote: 引用 9 楼 yupeigu 的回复:

Quote: 引用 8 楼 u012978850 的回复:

Quote: 引用 6 楼 yupeigu 的回复:

Quote: 引用 5 楼 u012978850 的回复:

标准答案给的是
SELECT A FROM Temp
WHERE A LIKE  '[A-Z]% '

试了以后查询结果并没有区分大小写,就很迷惑


我也试了一下,这个WHERE A LIKE  '[A-Z]% ' 确实有点问题,加上了排序规则,也还是不行。

对了,你有标准答案?

是一个教数据库的老师写的答案,显然,他的答案并不正确


呵呵,老师嘛,可能理论比较强,但是实践不一定强,还有就是这个我觉得有点像是sql server 的bug,很奇怪

二楼给的答案
select id,A from Temp 
 where ascii(left(A,1)) between ascii('A') and ascii('Z')

查询还是有点不明白

#13


引用 12 楼 u012978850 的回复:
Quote: 引用 11 楼 u012978850 的回复:

Quote: 引用 9 楼 yupeigu 的回复:

Quote: 引用 8 楼 u012978850 的回复:

Quote: 引用 6 楼 yupeigu 的回复:

Quote: 引用 5 楼 u012978850 的回复:

标准答案给的是
SELECT A FROM Temp
WHERE A LIKE  '[A-Z]% '

试了以后查询结果并没有区分大小写,就很迷惑


我也试了一下,这个WHERE A LIKE  '[A-Z]% ' 确实有点问题,加上了排序规则,也还是不行。

对了,你有标准答案?

是一个教数据库的老师写的答案,显然,他的答案并不正确


呵呵,老师嘛,可能理论比较强,但是实践不一定强,还有就是这个我觉得有点像是sql server 的bug,很奇怪

二楼给的答案
select id,A from Temp 
 where ascii(left(A,1)) between ascii('A') and ascii('Z')

查询还是有点不明白


他采用的是没办法的办法,也就是首先left函数返回A列的第一个字符,然后通过ascii函数,取得这个字符的ascii码,因为大写字符,和小写字符的,ascii码是不一样的,所以就能判断了

#14


引用 13 楼 yupeigu 的回复:
Quote: 引用 12 楼 u012978850 的回复:

Quote: 引用 11 楼 u012978850 的回复:

Quote: 引用 9 楼 yupeigu 的回复:

Quote: 引用 8 楼 u012978850 的回复:

Quote: 引用 6 楼 yupeigu 的回复:

Quote: 引用 5 楼 u012978850 的回复:

标准答案给的是
SELECT A FROM Temp
WHERE A LIKE  '[A-Z]% '

试了以后查询结果并没有区分大小写,就很迷惑


我也试了一下,这个WHERE A LIKE  '[A-Z]% ' 确实有点问题,加上了排序规则,也还是不行。

对了,你有标准答案?

是一个教数据库的老师写的答案,显然,他的答案并不正确


呵呵,老师嘛,可能理论比较强,但是实践不一定强,还有就是这个我觉得有点像是sql server 的bug,很奇怪

二楼给的答案
select id,A from Temp 
 where ascii(left(A,1)) between ascii('A') and ascii('Z')

查询还是有点不明白


他采用的是没办法的办法,也就是首先left函数返回A列的第一个字符,然后通过ascii函数,取得这个字符的ascii码,因为大写字符,和小写字符的,ascii码是不一样的,所以就能判断了

明白了,之前不知道left()函数的功能,Thank you,感谢大神的详细回复
T-SQL中大小写区分问题T-SQL中大小写区分问题

#15


该回复于2014-12-02 09:09:57被管理员删除

#1


通过指定排序规则,就可以 Chinese_PRC_CS_AS,其中的cs表示 大小写敏感

create table temp(prod_name nvarchar(100))

insert into temp
select 'a' union all
select 'A' 


select *
from temp
where prod_name  = 'a' collate Chinese_PRC_CS_AS 
/*
prod_name
a
*/

#2



create table Temp(id int,A varchar(10))

insert into Temp(id,A)
 select 1,'Book' union all
 select 2,'pen' union all
 select 3,'Phone' union all
 select 4,'Bag' union all
 select 5,'paper'


select id,A from Temp 
 where ascii(left(A,1)) between ascii('A') and ascii('Z')
 
/*
id          A
----------- ----------
1           Book
3           Phone
4           Bag

(3 row(s) affected)
*/

#3


抛弃效率的话,用UPPER()函数来试试

#4


很奇怪,我用like '[A-Z]%' collate Chinese_PRC_CS_AS 也无法实现这个需求

#5


标准答案给的是
SELECT A FROM Temp
WHERE A LIKE  '[A-Z]% '

试了以后查询结果并没有区分大小写,就很迷惑

#6


引用 5 楼 u012978850 的回复:
标准答案给的是
SELECT A FROM Temp
WHERE A LIKE  '[A-Z]% '

试了以后查询结果并没有区分大小写,就很迷惑


我也试了一下,这个WHERE A LIKE  '[A-Z]% ' 确实有点问题,加上了排序规则,也还是不行。

对了,你有标准答案?

#7


引用 2 楼 ap0405140 的回复:

create table Temp(id int,A varchar(10))

insert into Temp(id,A)
 select 1,'Book' union all
 select 2,'pen' union all
 select 3,'Phone' union all
 select 4,'Bag' union all
 select 5,'paper'


select id,A from Temp 
 where ascii(left(A,1)) between ascii('A') and ascii('Z')
 
/*
id          A
----------- ----------
1           Book
3           Phone
4           Bag

(3 row(s) affected)
*/
T-SQL中大小写区分问题T-SQL中大小写区分问题T-SQL中大小写区分问题

#8


引用 6 楼 yupeigu 的回复:
Quote: 引用 5 楼 u012978850 的回复:

标准答案给的是
SELECT A FROM Temp
WHERE A LIKE  '[A-Z]% '

试了以后查询结果并没有区分大小写,就很迷惑


我也试了一下,这个WHERE A LIKE  '[A-Z]% ' 确实有点问题,加上了排序规则,也还是不行。

对了,你有标准答案?

是一个教数据库的老师写的答案,显然,他的答案并不正确

#9


引用 8 楼 u012978850 的回复:
Quote: 引用 6 楼 yupeigu 的回复:

Quote: 引用 5 楼 u012978850 的回复:

标准答案给的是
SELECT A FROM Temp
WHERE A LIKE  '[A-Z]% '

试了以后查询结果并没有区分大小写,就很迷惑


我也试了一下,这个WHERE A LIKE  '[A-Z]% ' 确实有点问题,加上了排序规则,也还是不行。

对了,你有标准答案?

是一个教数据库的老师写的答案,显然,他的答案并不正确


呵呵,老师嘛,可能理论比较强,但是实践不一定强,还有就是这个我觉得有点像是sql server 的bug,很奇怪

#10


引用 2 楼 ap0405140 的回复:


select id,A from Temp 
 where ascii(left(A,1)) between ascii('A') and ascii('Z')

大神的答案是对的,可是查询这部分我还是有点不理解

#11


引用 9 楼 yupeigu 的回复:
Quote: 引用 8 楼 u012978850 的回复:

Quote: 引用 6 楼 yupeigu 的回复:

Quote: 引用 5 楼 u012978850 的回复:

标准答案给的是
SELECT A FROM Temp
WHERE A LIKE  '[A-Z]% '

试了以后查询结果并没有区分大小写,就很迷惑


我也试了一下,这个WHERE A LIKE  '[A-Z]% ' 确实有点问题,加上了排序规则,也还是不行。

对了,你有标准答案?

是一个教数据库的老师写的答案,显然,他的答案并不正确


呵呵,老师嘛,可能理论比较强,但是实践不一定强,还有就是这个我觉得有点像是sql server 的bug,很奇怪

对啊,按理说单引号里的内容是区分大小写的,但就是查不出来

#12


引用 11 楼 u012978850 的回复:
Quote: 引用 9 楼 yupeigu 的回复:

Quote: 引用 8 楼 u012978850 的回复:

Quote: 引用 6 楼 yupeigu 的回复:

Quote: 引用 5 楼 u012978850 的回复:

标准答案给的是
SELECT A FROM Temp
WHERE A LIKE  '[A-Z]% '

试了以后查询结果并没有区分大小写,就很迷惑


我也试了一下,这个WHERE A LIKE  '[A-Z]% ' 确实有点问题,加上了排序规则,也还是不行。

对了,你有标准答案?

是一个教数据库的老师写的答案,显然,他的答案并不正确


呵呵,老师嘛,可能理论比较强,但是实践不一定强,还有就是这个我觉得有点像是sql server 的bug,很奇怪

二楼给的答案
select id,A from Temp 
 where ascii(left(A,1)) between ascii('A') and ascii('Z')

查询还是有点不明白

#13


引用 12 楼 u012978850 的回复:
Quote: 引用 11 楼 u012978850 的回复:

Quote: 引用 9 楼 yupeigu 的回复:

Quote: 引用 8 楼 u012978850 的回复:

Quote: 引用 6 楼 yupeigu 的回复:

Quote: 引用 5 楼 u012978850 的回复:

标准答案给的是
SELECT A FROM Temp
WHERE A LIKE  '[A-Z]% '

试了以后查询结果并没有区分大小写,就很迷惑


我也试了一下,这个WHERE A LIKE  '[A-Z]% ' 确实有点问题,加上了排序规则,也还是不行。

对了,你有标准答案?

是一个教数据库的老师写的答案,显然,他的答案并不正确


呵呵,老师嘛,可能理论比较强,但是实践不一定强,还有就是这个我觉得有点像是sql server 的bug,很奇怪

二楼给的答案
select id,A from Temp 
 where ascii(left(A,1)) between ascii('A') and ascii('Z')

查询还是有点不明白


他采用的是没办法的办法,也就是首先left函数返回A列的第一个字符,然后通过ascii函数,取得这个字符的ascii码,因为大写字符,和小写字符的,ascii码是不一样的,所以就能判断了

#14


引用 13 楼 yupeigu 的回复:
Quote: 引用 12 楼 u012978850 的回复:

Quote: 引用 11 楼 u012978850 的回复:

Quote: 引用 9 楼 yupeigu 的回复:

Quote: 引用 8 楼 u012978850 的回复:

Quote: 引用 6 楼 yupeigu 的回复:

Quote: 引用 5 楼 u012978850 的回复:

标准答案给的是
SELECT A FROM Temp
WHERE A LIKE  '[A-Z]% '

试了以后查询结果并没有区分大小写,就很迷惑


我也试了一下,这个WHERE A LIKE  '[A-Z]% ' 确实有点问题,加上了排序规则,也还是不行。

对了,你有标准答案?

是一个教数据库的老师写的答案,显然,他的答案并不正确


呵呵,老师嘛,可能理论比较强,但是实践不一定强,还有就是这个我觉得有点像是sql server 的bug,很奇怪

二楼给的答案
select id,A from Temp 
 where ascii(left(A,1)) between ascii('A') and ascii('Z')

查询还是有点不明白


他采用的是没办法的办法,也就是首先left函数返回A列的第一个字符,然后通过ascii函数,取得这个字符的ascii码,因为大写字符,和小写字符的,ascii码是不一样的,所以就能判断了

明白了,之前不知道left()函数的功能,Thank you,感谢大神的详细回复
T-SQL中大小写区分问题T-SQL中大小写区分问题

#15


该回复于2014-12-02 09:09:57被管理员删除