您的位置:首页 > 数据库

Ms SQLServer 查询 区分大小写

2012-06-26 16:12 337 查看
1.

Case Insensitive & Case Sensitive

数据库默认设置一般是COLLATE Chinese_PRC_CI_AS,即不区分大小写,可以在查询的时候在语句最后增加"collate Chinese_PRC_CS_AS",指定为区分大小写进行查询,如:

select * from tbl_dept

where id= 'aA001' collate Chinese_PRC_CS_AS

这将不会查出'AA001'的记录.

2.

从sqlserver查询分析器中复制出来的字段值不一定是准确的:

比如某字段类型为varchar(15),某条记录的该字段的值为"A123"尾随一个CRLF(回车换行)符号,在从查询分析器中复制出来会显示为多出两个空格(用UltraEdit查看16进制显示为41 31 32 33 20 20 0D 0A),而从企业管理器里面复制出来就是真实的"A123"尾随一个CRLF.(41 31 32 33 0D 0A).

因为即使"A123"没有尾随CRLF,从查询分析器中复制出来,依然可以看到换行0D 0A,所以从以上信息可以推测如下对应关系:

41 31 32 33 20 20 0D 0A (左边粗体部分0D 0A其实是查询分析器复制的时候自动附加的)

41 31 32 33 0D 0A

即真正存储的CRLF符号在查询分析器中复制出来后被转换成了两个空格(20 20).

关注以下使用方法:

select *

from ICIssue

where 员工编号 = 'A123' + CHAR(13)+ CHAR(10)

第一种:(蟋蟀)

ALTER TABLE tb

ALTER COLUMN colname nvarchar(100) COLLATE Chinese_PRC_CI_AS

--不区分大小写

ALTER TABLE tb

ALTER COLUMN colname nvarchar(100) COLLATE Chinese_PRC_CS_AS

--区分大小写

alter database 数据库 COLLATE Chinese_PRC_CS_AS

第二种:(tree)

--创建如下用户自定义函数(UDF)

CREATE FUNCTION StrComp(@Str1 VARCHAR(50),@Str2 VARCHAR(50))

--ALTER FUNCTION StrComp(@Str1 VARCHAR(50),@Str2 VARCHAR(50))

RETURNS INTEGER

AS

BEGIN

DECLARE @i INTEGER

--DECLARE @Str1 VARCHAR(50)

--DECLARE @Str2 VARCHAR(50)

DECLARE @y INT

--SET @Str1='a'

--SET @Str2='A'

SET @i=0

--SELECT ASCII(SUBSTRING(@Str1,@i+1,1))

SET @y=1

DECLARE @iLen INT

SET @iLen = LEN(LTRIM(RTRIM(@Str1)))

IF LEN(LTRIM(RTRIM(@Str1))) < LEN(LTRIM(RTRIM(@Str2))) --THEN

SET @iLen = LEN(LTRIM(RTRIM(@Str2)))

WHILE (@i < @iLen)

BEGIN

IF (ASCII(SUBSTRING(@Str1,@i+1,1))=ASCII(SUBSTRING(@Str2,@i+1,1))) --THEN

SET @i = @i +1

ELSE

BEGIN

SET @y=0

BREAK

END

END

RETURN @y

END

测试:

select *

from Table1

Where dbo.StrComp(Field1,'aAbB') =1

第三种:(Oliver)

SQL Server 数据库中的文本信息可以用大写字母、小写字母或二者的组合进行存储。例如,姓氏可以"SMITH"、"Smith"或"smith"等形式出现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: