您的位置:首页 > 数据库

T-sql 学习(4) - 深入讨论数据类型

2008-10-16 14:26 232 查看
数据类型 之字符串函数

1)掩码Patindex
实际上应该叫做模式索引(Pattern Index),就是返回指定表达式中某模式第一次出现的起始位置;

在某些情况下,Patindex和where子句中的Like是一样的。

其区别:Patindex可以返回满足模式的行的索引;而Like只能执行过滤,不能返回位置。所以需要指定

位置的时候,PatIndex比较合适。

2)LIKE,模糊查找
%
包含零个或多个字符的任意字符串。
_
任何单个字符。
[ ]
指定范围(例如 [a-f])或集合(例如 [abcdef])内的任何单个字符。
[^]
不在指定范围(例如 [^a - f])或集合(例如 [^abcdef])内的任何单个字符。

比如:
LIKE 'Mc%' 将搜索以字母 Mc 开头的所有字符串(如 McBadden)。
LIKE '%inger' 将搜索以字母 inger 结尾的所有字符串(如 Ringer 和 Stringer)。
LIKE '%en%' 将搜索任意位置包含字母 en 的所有字符串(如 Bennet、Green 和 McBadden)。
LIKE '_heryl' 将搜索以字母 heryl 结尾的所有六个字母的名称(如 Cheryl 和 Sheryl)。
LIKE '[CK]ars[eo]n' 将搜索 Carsen、Karsen、Carson 和 Karson(如 Carson)。
LIKE '[M-Z]inger' 将搜索以字母 inger 结尾、以 M 到 Z 中的任何单个字母开头的所有名称(如

Ringer)。
LIKE 'M[^c]%' 将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称(如 MacFeather)。

3)字符串的执行
EXECUTE sp_executesql -- 必须传递unicode字符串
N'SELECT * FROM AdventureWorks.HumanResources.Employee
WHERE ManagerID = @level',
N'@level tinyint',
@level = 109;

或者
EXECUTE('SELECT PATINDEX(''%Ref%'',DocumentSummary)
FROM Production.Document
WHERE DocumentID = 3;')

推荐前者,因为:快,特性多

4)nchar和nvarchar的区别
nvarchar是可变长度的,所以在长度不定的情况下,nvarchar是比较合适的选择。有一个细节需要注意:

USE AdventureWorks;
GO

if object_id('tempdb..##zhs') is not null
drop table ##zhs -- 临时表不在当前数据库,而是在tempdb这个特定的数据库中

create table ##zhs
( id int identity,
username nvarchar(10)
)
go

insert into ##zhs(username) values ( 'zhs')
insert into ##zhs(username) values ( 'wang ')
insert into ##zhs(username) values ( ' li')
insert into ##zhs(username) values ( 'zhso')

select * from ##zhs

--------------------

result:
1 zhs
2 wang
3 li
4 zhso

如果把类型变为nchar,那么结果是:
1 zhs
2 wang
3 li
4 zhso

也就是说,nchar的时候,把结果都补齐到了10个;nvarchar的情况,则是不补齐,和原来输入一样,这

样也会节省空间。

5)数据类型转换
cast、convert、str都可以把数字类型转换为字符串类型,但是str更好一些

6)REPLICATE
按指定次数重复字符表达式。
REPLICATE (LastName, 2)

7)blob类型
他是比char,varchar更大的数据。太大,所以可能使用的不会太多。

8)唯一的ID
IDENTITY 是一个字段的属性,不是数据类型;

uniqueidentifier 是一个数据类型,它有下列缺点:

* 值长且难懂。这使用户难以正确键入它们,并且更难记住。
* 这些值是随机的,而且它们不支持任何使其对用户更有意义的模式。
*也没有任何方式可以决定生成 uniqueidentifier 值的顺序。它们不适用于那些依赖递增的键值的现有应用程序。
* 当 uniqueidentifier 为 16 字节时,其数据类型比其他数据类型(例如 4 字节的整数)大。这意味着使用 uniqueidentifier 键生成索引的速度相对慢于使用 int 键生成索引的速度。

所以:
* 在不要求全局唯一性或首选使用按序列增加的键时,请考虑使用 IDENTITY 属性。
*UNIQUEIDENTIFIER值不能像IDENTITY属性那样自动产生。要想为你的表格对象产生UNIQUEIDENTIFIER值,你必须指定NEWID函数为column的缺省值。

9)timestamp
timestamp 数据类型只是递增的数字,不保留日期或时间。
一个表只能有一个 timestamp 列。 每次修改或插入包含 timestamp 列的行时,就会在 timestamp 列中插入增量数据库时间戳值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐