Ms SQLServer 查询 区分大小写

转载 2012年06月26日 16:12:08

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


相关文章推荐

ms sqlserver 2008 空间查询操作

geometry字段的数据是平面坐标,不用投影  geography是经纬度,需要投影  1. 首先下载一个导入shp的工具,绿色版的。 http://www.sharpgis.net/pa...

MS Sqlserver优化实战(解决CPU利用率高及查询操作速度慢)

最近我们医院的LIS系统经常出现速度极慢的问题,而且由于LIS系统的数据库表设计本身存在问题,刚用了一年的时间某张表的数据就已经达到3千万条。 服务器:HP刀片机 1个CPU(双核),2G内存,高峰期...
  • kaylc
  • kaylc
  • 2011年03月05日 21:39
  • 1817

Ms SqlServer高级查询小结

Ø 基本常用查询 --select select * from student; --all 查询所有 select all sex from student; --distinc...

MS SQLServer多对多表间的查询

在做一个电子教务系统,其中用户是分配有角色的,而且角色与用户是多对多的关系,所以就在用户表与角色表蹭建立了一个【角色-用户】映射表,在是写代码 时,想要通过用户查看自己的角色。写了几个都不对。 这是...
  • itmaxin
  • itmaxin
  • 2012年05月30日 15:37
  • 2390

MS SQLSERVER如何实现跨服务器查询

有些时候为了分担服务器的负荷,或者各自完成自己的任务,望望是分布式,MS SQLSERVER 数据库部署在不同的服务器上,有些时候需要进行跨服务器查询,那么如何实现跨服务器查询呢,具体方法有好几种,下...

MS SQLSERVER实时增量DML和DDL数据捕获

SQLSERVER提供了很好的触发器捕获数据方法,针对DML数据库可以从inserted和deleted临时表获取数据,当然也可使用dbcc inputbuffer,但是个人不推荐这种法,dbcc i...

如何看MS SQLSERVER数据库的执行计划

1.输入一个查询语句看看SQL Server是如何显示查询计划的吧。 select v.OrderID, v.CustomerID, v.CustomerName, v.OrderDate, v...

DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC SHOWCONTIG显示指定的表或视图的数据和索引的碎片信息

显示指定的表或视图的数据和索引的碎片信息。 重要提示 后续版本的 Microsoft SQL Server 将删除该功能。请不要在新的开发工作中使用该功能,并尽快修改当前还在使用该功...

c++在unix系统上访问ms sqlserver的方法

ms sqlserver是微软出品,自然没有unix版本,对于c++来说,客户端也很少,最著名的是freetds,他有两种访问模式,一种就是ODBC的方式,还有一种是直连的方式。对于大部分开发者来说,...

MS SQLServer 批量附加数据库

Use master Go if object_ID('[sp_AttchDataBase]') is not null Drop Procedure [sp_AttchDataBase] GO ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Ms SQLServer 查询 区分大小写
举报原因:
原因补充:

(最多只允许输入30个字)