一 处理字符函数
(一)排序规则
1
1)Latin1_General 支持英语
2)字典排序 基于字典排序对字符数据进行排序和比较('A'和'a'<'B'和'b').(排序规则名称中没有显示地出现BIN元素)。如果出现BIN元素,就表示要根据字符的二进制表示对字符数据进行排序和比较('A'<'a'<'B'<'b').
CI 数据不区分大小写('a'='A')
AS 数据区分重音('a'<>'a')-------------声调
2 如果在列的排序规则是不区分大小写的前提下,让过滤条件是区分大小写的,则可以如下修改表达式的排序规则:
SELECT empid,firstname,lastname
FROM HR.Employees
WHERE lastname COLLATE Latin1_General_CS_AS = N'davis';
这次,查询将返回一个空的结果集,因为当使用区分大小写的比较时,没有找到任何匹配的信息。
(二)运算符和函数
字符串串联运算符(加号[+])
SELECT empid,firstname,+N''+lastname AS fullname
FROM HR.Employees;
输出:
empid firstname fullname
1 Sara Davis
2 Don Funk
3 Judy Lew
4 Yael Peled
5 Sven Buck
6 Paul Suurs
7 Russell King
8 Maria Cameron
9 Zoya Dolgopyatova
(三)有关字符串处理
1 LEN 统计字符串长度 --SELECT LEN('Hello') --尾部空格不计
DATALENGTH 函数 包含尾部空格 (磁盘空间) SELECT DATALENGTH (N'abcde');
SELECT DATALENGTH
2 转为小写 Lower('HELLO') 转为大写的 UPPER('hello')
3 找位置(某个子串第一次出现的起始位置) CharIndex('o','hello',1)
注:第一个参数要查找的(substring),第二个参数原字符串(string),第三个参数是起始位置(start_pos)
4 PATINDEX(pattern ,string)函数 返回字符串中某个模式第一次出现的起始位置
例:
SELECT PATINDEX('%[0-9]%','abcd123efgh'); 返回5
注:有点像LIKE谓词
5 REPLACE 替换
SELECT REPLACE('hello world','hello','world')
输出:world world
注:第一个参数是原始字符串,第二个参数是要替换的字符串,第三个是替换后的字符串
6 STUFF (string ,pos,delete_length,insertstring) 先删除字符串中的一个子串,再插入一个新的字符串作为替换。
例:
SELECT ('XYZ',2,1,'abc')
删除第二个字符,再插入字符串‘abc’
7删除空格
RTRIM LTRIM删除输入字符串中的尾随空格或前导空格
语法
RTRIM(string),LTRIM(string)
既想删除前导空格,又想删除尾随空格,则可以将一个函数的结果作为另一个函数的输入来使用。
例 :
以下代码会删除字符串的前导空格和尾随空格,最后返回‘abc’.
SELECT RTRIM(LTRIM(' abc '))
8 SUBSTRING (string ,start,length)函数 (从字符串中提取子串)
SELECT SUBSTRING('abcd',1,3)
注:第一个参数原字符串,第二个参数指定开始位置,第三个截取的长度
9 LIKE 谓词
1)% (百分号)通配符 代表任意长度的字符串,也包括空字符串。
例 返回姓氏(last name)以字符‘D’开头的所有雇员。
SELECT empid,lastname
FROM HR.Employees
WHERE lastname LIKE N'D%';
2) _(下划线)通配符 表示任意单个字符
例: 返回姓氏(lastname)第二个字符为‘e’的所有雇员
SELECT empid,lastname
FROM HR.Employees
WHERE lastname LIKE N'_e%';
3)
LEFT 和RIGHT函数
LEFT(string ,n),RIGHT(string,n)
参数1表示函数要处理的字符串,参数2表示要从字符串的左边或右边提取的字符个数。例如以下代码返回字符串‘cde’:
SELECT RIGHT('abcde',3);