SQL Server 中字符数据处理解析(中)

本篇介绍对字符串进行处理的字符串串联运算符(+)和函数。

 

一.字符串串联运算符

T-SQL 提供了加号(+)运算符, 可以将两个或多个字符串合并或串联成一个字符串。 

SELECT empid, firstname + N' '+ lastname AS fullname FROM HR.Employees; 

ANSI SQL 规定对 NULL 值执行字符串串联运算也会产生 NULL 值的结果。 这是 SQL Server 的默认行为。 通过将一个名为 CONCAT_NULL_YIELDS_NULL 的会话选项设置为 OFF, 就可以改变 SQLServer 处理串联的方式。这时,SQLServer 将把 NULL 值作为空字符串来进行串联。

 

二.处理函数

T-SQL提供了一套字符串处理函数, 其中包括SUBSTRING、 LEFT、 RIGHT、 LEN、CHARIND EX、 PATINDEX、 REPLACE、 REPLICATE、STUFF、 UPPER、 WWER、 RTRIM 、LTRIM, 等等。

  SUBSTRING,用于从字符串中提取子串。

SUBSTRING(string, start, length) 

该函数对输入的字符串进行处理, 提取从指定位置开始, 具有特定长度的子字符串。 例如, 以下代码返回字符串'abc':

SELECT SUBSTRING('abcde', 1, 3); 

如果第二个参数和第三个参数的和超过了输入字符串的长度, 则函数返回从起始位置开始, 直到字符串结尾的整个值表达式, 而不会引发错误。 当你想返回字符串中从某个位置开始,直到结尾的所有内容时,可以指定一个非常大的值或时表示整个输入字符串长度的值就可以。

  LEFT 和 RIGHT,SUBSTRING函数的简略形式, 它们分别返回输入字符串中从左边或右边开始指定个数的字符。

LEFT(string, n), RIGHT(string, n) 

第一个参数(string)是函数要处理的字符串。 第二个参数(n)是要从字符串的左边或 右边提取的字符个数。 例如, 以下代码返回字符串'cde':

SELECT RIGHT('abcde', 3); 

►  LEN 和 DATALENGTH

LEN函数返回输入字符串中的字符数。

LEN(string); 

该函数返回的是输入字符串中的字符数,而不一定是其字节数。对于普通字符,这两个数字是相同的,因为每个字符只占一个字节的存储空间。而对于Unicode字符,每个字符需要两个字节的存储空间;因此,字符串的字符数是字节数的一半。如果要得到字节数,则应该使用DATALENGTH函数。以下代码返回5:

SELECT LEN(N'abcde'); 

而以下代码则返回10:

SELECT DATALENGTH(N'abcde'); 

LEN和DATALENGTH函数的另一个区别是:前者不包含尾随空格,而后者会包含尾随的空格。

►  CHARINDEX,返回字符串中某个子串第一次出现的起始位置

CHARINDEX(substring, string[, start_pos)) 

该函数在第二个参数(string)中搜索第一个参数(substring), 并返回其起始位置。可以选择性地指定第三个参数(start_pos), 以便告诉这个函数从字符串的什么位置开始搜索。如果未指定第三个参数,则将从字符串的第一个字符开始搜索。如果在string中 找不到substring,则CHARINDEX返回0。例如,以下代码在'ltzik Ben-Gan'中查找第—个空格的位置,结果将返回6:

SELECT CHARINDEX(' ','Itzik Ben-Gan.'); 

►   PATINDEX,返回字符串中某个模式第一次出现的起始位置。

PATINDEX(pattern, string) 

参数pattern使用的模式与T-SQL中LIKE谓词使用的模式类似。以下例子演示怎么在字符串中找到第一次出现数字的位置:

SELECT PATINDEX('%[0-9]%','abcd123efgh'); 

►  REPLACE,将字符串中出现的所有某个子串替换为另一个字符串。

REPLACE(string, substringl, substring2) 

该函数会将string中出现的所有substring1替换为substring2。 例如, 以下代码将输入字符串中的所有连字符(-)替换为冒号(:)

SELECT REPLACE('l-a 2-b','-',':'); 

可以使用REPLACE函数来计算字符串中某个字符出现的次数。先将字符串中所有的那个字符替换为空字符串(长度为0的字符串), 再计算字符串的原始长度和新长度的差值。 例如, 以下查询返回每个雇员的lastname列中字符e'出现的次数:

SELECT empid, lastname, 
    LEN(lastname) - LEN(REPLACE(lastname,'e','')) AS numoccur 
FROM HR.Employees;

►  REPLICATE,以指定的次数复制字符串值。

REPLICATE(string, n) 

例如, 以下代码将字符串abc复制三次, 返回字符串 'abcabcabc':

SELECT REPLICATE('abc', 3); 

下面这个例子显示了REPLJCATE函数, 以及RIGHT函数和字符串串联的用法。 以下对Production.Suppliers的查询为每个供应商的整数ID生成一个10位数字的字符串表示(不足10位时,前面补0)

SELECT supplierid, 
    RIGHT(REPLICATE('0', 9) + CAST(supplierid AS VARCHAR(l0)), 10) AS strsupplierid 
FROM Production.Suppliers; 

►  STUFF,先删除字符串中的一个子串, 再插入一个新的子字符串作为替换。

STUFF (string,pos,delete_length,insertstring)

该函数对输入参数string进行处理, 从输入参数pos指定的位置开始删除delete_length 参数指定长度的字符; 然后将insertstring参数指定的字符串插入到pos指定的位置。 例如, 以下代码对字符串xyz进行处理, 删除掉其中的第二个字符, 再插入字符串abc':

SELECT STUFF('xyz', 2, 1,'abc'); 

►  UPPER 和 LOWER,将输入字符串中的所有字符都转换为大写或小写字符。

UPPER(string) , LOWER(string) 

►  RTRIM和LTRIM,用于删除输入字符串中的尾随空格或前导空格。

RTRIM(string), LTRIM(string) 

如果既想删除前导空格, 也想删除尾随空格, 则可以将一个函数的结果作为另一个函数的输入来使用。例如,以下代码会删除输入字符串的前导空格和尾随空格,最后返回abc':

SELECT RTRIM(LTRIM('abc')); 

 

 

好了,本篇文章就介绍到这儿,欢迎大家留言交流;喜欢或有帮助到您的话,点个赞或推荐支持一下!

 

转载于:https://www.cnblogs.com/johnvwan/p/9463122.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值