Ms SQLServer 查询 区分大小写

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"等形式出现。


阅读更多
个人分类: sqlserver
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭