• 字符数据


    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

  • 相关阅读:
    LeetCode 404. 左叶子之和
    三年了
    LeetCode 543. 二叉树的直径
    求结点在二叉排序树中层次的算法
    LeetCode 98. 验证二叉搜索树
    LeetCode 236. 二叉树的最近公共祖先
    LeetCode 129. 求根到叶子节点数字之和
    LeetCode 113. 路径总和 II
    LeetCode 107. 二叉树的层次遍历 II
    LeetCode 144. 二叉树的前序遍历 (非递归)
  • 原文地址:https://www.cnblogs.com/dehigher/p/10660046.html
Copyright © 2020-2023  润新知