HQL语句 查询时如何区分大小写?

2024-12-24 22:41:19
推荐回答(1个)
回答1:

这跟程序应该没有直接的关系,你把hibernate生成的sql语句打印出来,到sql查询分析器里运行应该也是不区分大小写的,这是跟你的数据库配置或者在建表的时候的设置有直接关系.
给你推荐几种方式.
一,设置列属性方式
--区分大小写
create table tbl
(
f1 varchar(10) collate chinese_prc_cs_as --区分大小写
)
--不区分大小写
create table tbl
(
f1 varchar(10) collate chinese_prc_ci_as --不区分大小写
)

insert into tbl values('abc');
insert into tbl values('Abc');
insert into tbl values('ABC');

select * from tbl where f1 = 'abc'

如果采用不区分大小写的字段属性,则结果是
abc
Abc
ABC

如果采用区分大小写的字段属性,则结果是
abc

二,直接针对db的
--区分大小写
alter database dbname collate chinese_prc_cs_as

--不区分大小写
alter database dbname collate chinese_prc_ci_as

三,查询时来转换

select * from tbl where convert(varbinary, f)=convert(varbinary, N'ABC')

四,数据库安装设置时就处理
这样数据库名,用户,表名,字段等都区分了

五,自己写函数来处理
不过这样效率较差,因为一般方法是逐个字符按照ascii编码比较

六,采用contains胃词
一般情况我们都是用
select * from table1 where t1='xx'
这种是不区分大小写的,下面这种大小写敏感,这需要在该表建立全文索引才能使用.
select * from table1 where contains(t1,'"xx"')