`
jiagyao
  • 浏览: 99798 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

SQL Server学习笔记之--与字符相关的问题

阅读更多
1.模式匹配
SQL server 提供的模式匹配是有限的,它利用LIKE 和PATINDEX 函数实现匹配,并不支持正则表达式。
通过收集字符列的子字符串统计信息,SQL2005加强了LIke的优化。即当字符串以通配符开始的时候,
它将比SQL2000更加精确的决定是否使用索引(意思就是以通配符开始的LIKE查询也是可以用索引的)。
-------函数LEFT查找以A开头的CustomerID
select companyname
from Customers
where LEFT(CustomerID,1)='A'
-----用like通配 查找以A开头的CustomerID
select companyname
from Customers
where CustomerID like 'A%'
通过执行计划(CTRL+L) 可以看到第一个表达式不再是SARG 优化器不再用有序的索引访问,即为 索引扫描
                                                  第二个表达式使用到了聚集索引查找
但是LIKE所能做到的匹配是很有限的,比如它不能很好涉及到重复的概念,
比如你要约束列col 使它只能输入数字
如果col列长度不长 只有8位 ,则 check(col like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')
但是一旦长度不固定 你就可以这么做 check(col  like replicate('[0-9]',len(col ))) (replicate(a,b)返回B个重复的A)
但是当COL长度太长 上面句子效率太低 所以你可以使用否定的做法 即没有一个字符不是数字 check(sn not like '%[^0-9]%')
这里再说一个IP地址的问题
假如你要查找一个表里是正确的IP地址的IP ,比如
CREATE TABLE dbo.IPs(ip varchar(15) NOT NULL PRIMARY KEY);
--正确的IP地址
INSERT INTO dbo.IPs VALUES('131.107.2.201');
INSERT INTO dbo.IPs VALUES('131.33.2.201');
INSERT INTO dbo.IPs VALUES('131.33.2.202');
INSERT INTO dbo.IPs VALUES('3.107.2.4');
INSERT INTO dbo.IPs VALUES('3.107.3.169');
INSERT INTO dbo.IPs VALUES('3.107.104.172');
INSERT INTO dbo.IPs VALUES('22.107.202.123');
INSERT INTO dbo.IPs VALUES('22.20.2.77');
INSERT INTO dbo.IPs VALUES('22.156.9.91');
INSERT INTO dbo.IPs VALUES('22.156.89.32');
--不规范的IP地址
INSERT INTO dbo.IPs VALUES('1.1.1.256');
INSERT INTO dbo.IPs VALUES('1.1.1.1.1');
INSERT INTO dbo.IPs VALUES('1.1.1');
INSERT INTO dbo.IPs VALUES('1..1.1');
INSERT INTO dbo.IPs VALUES('.1.1.1');
INSERT INTO dbo.IPs VALUES('a.1.1.1');
GO
--根据IP地址的规范性进行控制where条件
select *
from IPs
where ip like '_%._%._%._%'--保证每个部分都不为NULL
and ip not like'%.%.%.%.%'--保证不存在4个以及更多点
and ip not like '%[0-9][0-9][0-9][0-9]%'--保证不会出现一个部分多于三个数的情况(每个部分最大255 8个字节)
and ip not like '%[^0-9.]%'--保证不出现数字和'.'外的字符
and ip not Like '%[3-9][0-9][0-9]%'--保证不出现300-999
and ip not like '%2[6-9][0-9]%'--保证不出现260-299
and ip not like '%25[6-9]%'--保证不出现256-259
--巧妙利用PAREENAME函数进行判断(这个可能我写的有漏洞)
select *
from IPs
where PARSENAME(ip,1) between 1 and 255 and
PARSENAME(ip,2) between 1 and 255 and
PARSENAME(ip,3) between 1 and 255 and
PARSENAME(ip,4) between 1 and 255  --这里没控制'.'因为PARSENAME只认识.
2.区分大小写
这个大小写的设置是依靠于数据的排序规则,默认是不区分的。
一般情况下 我们如果要在查询时候区分大小写时候 可以通过修改排序规则达到目的
USE Northwind;
go
SELECT CustomerID, CompanyName, Country
FROM dbo.Customers
WHERE CustomerID COLLATE Latin1_General_CS_AS = N'ALFKI';--这里通过COLLATE修改了排序规则后进行查询(CS 表示区分),这里关于SQL的排序规则可以在我的博客里找到相关详细介绍(http://blog.csdn.net/feixianxxx/archive/2009/10/05/4633610.aspx
正是因为对列 CustomerID队了处理,那么它不再是一个SRAG,不会再使用到索引。
解决方法:
SELECT CustomerID, CompanyName, Country
FROM dbo.Customers
WHERE CustomerID COLLATE Latin1_General_CS_AS = N'ALFKI'
  AND CustomerID = N'ALFKI'; --这里添加了一个不区分大小写的判断语句,使得一开始能用索引查找相关的信息 然后再 过滤 速度自然快很多了
当然你也可以通过执行计划看到 第一个用到时扫描 第二个查找
分享到:
评论

相关推荐

    SQL SERVER学习笔记

    根据提供的文件内容,我们可以整理出一系列关于SQL Server的基础知识点,主要涵盖了数据库的创建与删除、表的创建与修改、数据的插入与更新、以及查询语句等关键操作。下面将详细解析这些知识点。 ### 1. 数据库的...

    Sqlserver2008--学习笔记(自己总结)

    ### Sqlserver2008 学习笔记精要 #### 第一章 SQL Server 基础 ##### 1. T-SQL 语句基础 - **创建数据库**: 使用 `CREATE DATABASE` 语句来创建一个新的数据库。例如: ```sql CREATE DATABASE 新数据库名; ``...

    sqlserver个人学习笔记

    ### SQLServer个人学习笔记知识点概览 #### 一、日期格式转换:`SELECT REPLACE(CONVERT(CHAR(8),GETDATE(),120),'-','')` - **知识点**:使用`CONVERT`函数将当前系统时间`GETDATE()`转换为指定格式的字符串,并...

    sql server学习笔记

    SQL Server 学习笔记 SQL Server 是一种关系数据库管理系统,从事数据库管理的人士可以通过本学习笔记快速了解 SQL Server 的主要特点和知识点。 创建、删除、修改数据库对象 * Create:创建数据库对象,如表、...

    SqlServer初学者学习笔记

    以下是一些关于Sql Server学习的重要知识点: 1. 数据库基础:首先,你需要了解数据库的基本概念,如数据库、表、字段、记录等。Sql Server支持多种数据库模型,最常用的是关系模型,其中,表是数据的主要存储形式...

    SQL+SERVER+2008+学习笔记

    ### SQL Server 2008 学习笔记关键知识点概览 #### 一、SQL Server 2008 安装与配置 ##### 1.1 版本介绍 - **企业版**: 面向大型企业,提供最全面的功能。 - **标准版**: 提供核心的数据管理和业务智能功能。 - **...

    sqlserver数据库操作笔记

    ### SQL Server 数据库操作知识点详解 #### 一、SQL Server 的安装与配置 **1....- **准备阶段:** 首先...这些知识对于初学者来说是非常重要的基础,掌握了这些技能后,可以进一步深入学习SQL Server的高级功能和应用。

    chx 学习jForum笔记十八 jForum与ms sqlserver

    《jForum与MS SQLServer整合学习笔记》 jForum是一款基于Java的开源论坛系统,它以其高度可定制性、灵活性和强大的功能深受开发者喜爱。在本文中,我们将深入探讨如何将jForum与Microsoft SQL Server(简称MS SQL...

    SQL Server数据库基础学习笔记

    在SQL Server数据库的基础学习中,理解并掌握各个系统数据库的功能至关重要。首先,master数据库是整个SQL Server的核心,它存储了所有系统级别的信息,包括用户数据库的控制信息、账户设置、环境变量以及系统错误...

    SQL SERVER 自学教程(有基础才好学)

    本教程“SQL SERVER 自学教程(有基础才好学)”旨在帮助那些已经对数据库有一定理解的学习者进一步提升SQL Server的技能。 首先,你需要了解SQL语言的基础,包括SELECT语句用于查询数据,INSERT用于插入数据,UPDATE...

    Microsoft SQL 数据库学习笔记

    本学习笔记将深入探讨Microsoft SQL Server的核心概念和功能,帮助你掌握这一强大工具。 1. **SQL基础** - SQL语法:了解如何创建、修改和删除表,以及执行基本的查询操作,如SELECT语句,用于从数据库中检索数据...

    sql server笔记

    1. **安装与配置**:SQL Server的安装涉及多个步骤,包括选择版本、组件、服务配置等。安装后,需进行实例创建、设置安全性(如登录账户、权限分配)、网络配置以及数据库初始化。 2. **数据库管理**:SQL Server中...

    sql学习笔记 包含实例

    根据提供的文件信息,我们可以归纳出一系列关于SQL学习的重要知识点,主要围绕Oracle数据库的基本操作展开,包括表的创建、数据插入、查询以及简单的数据处理等。接下来将对这些知识点进行详细的阐述。 ### 一、表...

    sql server 2005 使用笔记之常用函数和经典sql语句

    这篇笔记主要探讨的是SQL Server 2005中的常用函数以及一些经典的SQL语句,这对于数据库管理员和开发人员来说是非常有价值的知识。 一、SQL Server 2005中的常用函数 1. **聚合函数**:如SUM, COUNT, AVG, MAX, ...

    sql server2000 笔记

    本笔记主要涵盖了SQL Server 2000的学习要点,包括基础概念、安装配置、数据类型、T-SQL语言、表和索引、视图、存储过程、触发器、安全性以及备份恢复等多个方面。 1. **基础概念**:SQL(Structured Query ...

    sql server上课笔记

    ### SQL Server 上课笔记知识点概览 #### 一、SQL 基础概念与操作 - **SQL (Structured Query Language)**:结构化查询语言,是一种用于管理关系数据库的标准语言。 - **约束**:用于限制存储在表中的数据类型,...

    Oracle 10g sql 学习笔记

    Oracle 10g SQL 学习笔记涵盖了Oracle数据库的基础知识,包括版本信息、数据库系统特点、关系型数据库结构、SQL语言、操作环境以及常见的数据库操作。以下是对这些知识点的详细说明: 1. **Oracle 9i基础知识**: ...

    sql学习笔记 常见问题总结

    本学习笔记旨在总结SQL的常见问题及基础概念,帮助读者深入理解和掌握SQL的核心技巧。 一、SQL基础 1. 数据库与表结构:SQL中的数据库是由多个表组成的集合,每个表包含若干列和行。列定义了数据类型,如整数、...

    sql server学习与参考文章

    在文件"SQLServer.nyf"和"nyf文件应用必读.txt"中,可能包含了更多关于如何使用nyf这种特定格式的文件与SQL Server交互的信息。NYF文件通常关联于某种特定的数据库或笔记软件,可能存储了SQL查询、数据库结构或其他...

    SqlServer日期函数学习笔记.rar

    这份"Sql Server日期函数学习笔记"涵盖了数据库管理员和开发人员在处理日期和时间数据时所需的关键知识。以下是对这些函数的详细解释: 1. **GETDATE()** 函数: 这是最基础的日期函数,用于获取当前系统日期和...

Global site tag (gtag.js) - Google Analytics