字符数据

1、数据类型

(1)sqlServer 支持两种字符数据类型-常规和unicode

(2)常规包括char 和 varchar 、unicode包括nchar和nvarchar

  (3)   常规字符的每个字符使用1个字节存储、unicode要求2个字节

  (4)   使用常规只能限制英文,unicode支持中文

(5)两种字符数据类型的文本表示方式不同,常规字节使用单引号、如‘abc’ ,在表示unicode时,需要指定字符N(即 National)作为前缀,N'abc'

  (6)  没有var元素的任何数据类型(char ,nchar)具有固定长度,即sql server 按照定义的大小保留行空间,而不是按字符串时间字符数保留空间

(7)char(25)表示sqlserver 在改行保留25个字符空间、不管存储字符串的长度是多少

(8)当固定长度设置过大时,存储开销大,不是最佳方案、使用var元素的数据类型具有可变长度,即sqlserver 根据存储需要在行中使用尽可能多的存储空间存储字符串,同时外加两个额外的字节偏移数据

(9)varchar(25)支持的最大字符数时25,但实际上按照字符串中实际字符数确定存储,这样设置存储消耗会小于固定长度,读取速度更快

(10)使用可变长度,当更新数据时可能会导致行拓展、这可能导致数据移动到当前page之外,因此可变长度的数据更新效率低于固定长度数据类型

(11)可以使用MAX 说明符定义可变长度数据类型,而不是最大字符数,当使用了MAX说明符后,阀值内的直接存储、超过了会自动作为大型对象(LOB)存储在行的外部

 

2、排序规则

(1)排序规则是一个字符数据属性,封装多项内容,包括语言支持、排序规则、区分大小写、区分重音等

(2)查询数据库所支持的所有字符集

select * from SYS.fn_helpcollations();

 (3) 对Latin1_General_CI_AS 说明

      Latin1_General :语言支持、支持英语、德语字符

      排序规则: 由于没有限制定义排序规则、默认使用字典排序(自然排序规则)、如果出现了BIN意味着使用二进制排序

      CI 表示不区分大小写(a=A)

      AS表示区分重音

(4)在企业内部部署的sqlserver 实施中,排序规则定义在4个不同层次,实例,数据库 ,列,表达式,在Azure Sql中排序规则在数据库、列、表达式,注意不支持实例实例级别上指定

 

 

3、字符串操作函数

3.1字符串连接

(1)T-sql 提供了(+) 和 concat函数连接字符串,其中concat是sql server2012提供的

select  firstname+N' '+lastname as fullname
form HR.Employees;

 

 

(2)标准sql规定了连接NULL 的结果为NULL ,这也是Sql Server 的默认行为,因此在做字符串拼接的时候要考虑将NULL 看做空串对待,解决方案是使用coalesce函数,此函数接收一个输入值返回一个非null输出值

-- 若region  为NULL,N''+region为NULL,coalesce函数会将其替换成N''
select coalesce(N''+region,N' ') from Sales.Customers

 

(3)sql server 2012 引入了一个名为concat的新函数,接收一个要连接的输入字符列表,自动将NULL 替换成空串

select concat(firstname,N' ' ,lastname) as fullname
from HR.Employees

 

 

3.2 字符串截取

(1)substring(str,start,length) ,substring('abcde',1,3) 返回abc 、 如果第三个参数超过输入字符串的末尾,并不会引发错误,函数将会返回一个直到末尾的所有字符串

(2)left 和 right 是substring 的简化形式,left(str,n) 、 right(str,n) , left('abcde',3) 返回‘abc’

 

3.3字符串字符长度

(1)len(str) , len(N'abcde'),返回5

(2)注意len 是返回字符数,跟字符类型没有关系,如果想返回字节数 datalength(N'abcde') 返回10

(3)len 会将首尾空格删掉,datalength 不会

 

3.4 返回子字符串第一次出现的位置

(1)charindex(substr,str) ,位置从1开始数

(2)如果没有找到返回0

 

3.5大小写转换

(1)UPPER(str) ,LOWER(str)

 

3.6 删除前后空格

(1)rtrim 和 ltrim 分别删除首尾空格

(2)rtrim(ltrim(str)) 等于java中的trim

 

转载于:https://www.cnblogs.com/dehigher/p/10660046.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值