zoukankan      html  css  js  c++  java
  • SQL Server之字符串处理函数

    摘自:https://www.cnblogs.com/mcgrady/p/3862894.html

      这一篇文章主要总结开发过程中经常使用到的字符串处理函数,它们在处理字符串时非常有用,那么,总结起来有以下函数。

    1,字符串串联运算符

    2,SUBSTRING提取子串

    3,LEFT和RIGHT

    4,LEN和DATALENGTH

    5,CHARINDEX函数

    6,PATINDEX函数

    7,REPLACE替换

    8,REPLICATE复制字符串

    9,STUFF函数

    10,UPPER和LOWER函数

    11,RTRIM和LTRIM函数

    字符串串联运算符

    由于业务需要,有的时候我们需要将两个字段(列)组合起来,中间加上分隔符,然后输出。这时我们就会用到字符串串联运算符[+]号。例如,我们对Employees表中的firstname,空格和lastname列串联起来,生成完整的姓名fullname列。

    SQL查询代码:

    复制代码
    -- 设置数据库上下文
    USE TSQLFundamentals2008;
    GO
    
    -- fullname是串联运算符串联后的结果
    SELECT empid,firstname,lastname,firstname+N' '+lastname AS fullname 
    FROM hr.Employees
    复制代码

    查询结果:

    需要注意的是,ANSI SQL规定对NULL值执行串联运算后也会产生NULL值的结果,这是SQL Server的默认行为。当然,可以通过将名为CONCAT_NULL_YIELDS_NULL的会话选项设置为OFF来改变SQL Server的默认处理方式,但是要记得,在处理完成后要设置回原来的ON状态。

    SUBSTRING提取子串

    SUBSTRING函数用于从字符串中提取子串。例如,以下代码返回字符串‘abc’.

    SQL查询代码:

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

    查询结果:

    注意:1,一般开始位置是从1开始的。

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

    LEFT和RIGHT

    LEFT和RIGHT函数是SUBSTRING的简写形式,它们分别返回输入字符串从左或右边开始的指定个数的字符。例如,以下代码返回字符'cde'。

    SQL查询代码:

    SELECT RIGHT('abcde',3);

    查询结果跟SUBSTRING一样。LEFT的使用同RIGHT。

    LEN和DATALENGTH

    LEN函数返回输入字符串的字符数。而DATALENGTH函数返回输入字符串的字节数。需要注意它们的区别。LEN的语法形式为:LEN(string),DATALENGTH的语法形式为:DATALENGTH(string)

    例如,以下代码返回字符串的字符数5

    SQL查询代码:

    SELECT LEN(N'abcde');

    查询结果输出:5

    而如果使用DATALENGTH函数则输出:10。

    CHARINDEX函数

    CHARINDEX函数返回字符串中某个子串第一次出现的起始位置。它的语法形式为:CHARINDEX(substring,string[,start_pos]),该函数在第二个参数(string)中搜索第一个参数(substring),并返回其起始位置,可以选择性地指定第三个参数(start_pos),以便告诉这个函数从字符串的什么位置开始搜索,如果不指定的话,则从字符串的第一个字符串开始搜索。如果在string中找不到substring,则函数返回0。

    例如,以下代码在'trac mcgrady'中查找第一个空格的位置,结果将返回5

    SQL查询代码:

    SELECT CHARINDEX(' ','trac mcgrady');

    PATINDEX函数

    PATINDEX函数返回字符串中某个模式第一次出现的起始位置。它的语法形式为:PATINDEX(pattern,string)

    例如,我们需要在字符串中找到第一次出现数字的位置。

    SQL查询代码:

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

    查询结果:5

    REPLACE替换

    REPLACE函数将字符串中出现的某个子串替换为另一个字符串。它的语法形式为:REPLACE(string,substring1,substring2),该函数会将string中出现的所有substring1替换为substring2。

    例如,以下代码将输入字符串中的所有连字符(-)替换为冒号(:)

    SQL查询代码:

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

    查询结果:1:a 2:b

    REPLICATE复制字符串

    REPLICATE函数以指定的次数复制字符串值。它的语法形式为:REPLICATE(string,n)

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

    SQL查询代码:

    SELECT REPLICATE('abc',3);

    查询结果:'abcabcabc'

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

    SQL查询代码:

    复制代码
    -- 设置数据库上下文
    USE TSQLFundamentals2008;
    GO
    
    SELECT supplierid,
        RIGHT(REPLICATE('0',9)+CAST(supplierid AS VARCHAR(10)),10) AS strsupplierid
    FROM Production.Suppliers
    ORDER BY supplierid
    复制代码

    查询结果:

    STUFF函数

    STUFF函数可以先删除字符串中的一个子串,然后再插入一个新的子串作为替换。它的语法形式为:STUFF(string,pos,delete_length,insertstring)

    例如,以下代码对字符串‘xyz’进行处理,先删除其中的第二个字符,再插入字符串'abc'.

    SQL查询代码:

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

    查询结果:'xabcz'

    UPPER和LOWER函数

    UPPER和LOWER函数用于将输入字符串中的所有字符都转换为大写或小写形式。它们的语法形式为:UPPER(string),LOWER(string)。

    例如,第一个函数返回'TRAC MCGRADY',第二个函数返回'trac mcgrady'。

    -- 返回'TRAC MCGRADY'
    SELECT UPPER('trac mcgrady');
    
    -- 返回‘trac mcgrady’
    SELECT LOWER('Trac Mcgrady');

    RTRIM和LTRIM函数

    RTRIM和LTRIM函数用于删除输入字符串的尾部空格和前导空格。它们的语法形式为:RTRIM(string),LTRIM(string)。如果既想删除前导空格,也想删除尾部空格,则可以将一个函数的结果作为另一个函数的输入来使用。例如,以下代码会删除输入字符串的前导空格和尾部空格,最后返回‘abc’

    SQL查询代码:

    -- 返回'abc'
    SELECT RTRIM(LTRIM(' abc '));
  • 相关阅读:
    阿里云CentOS 7无外网IP的ECS访问外网(配置网关服务器)
    CentOS 7配置成网关服务器
    Mac/Ubuntu下的数据建模工具PDMan,替代PowerDesigner
    Docker卸载高版本重装低版本后启动提示:driver not supported
    Redis连接出现Error: Connection reset by peer的问题是由于使用Redis的安全模式
    Mac流量监控/硬盘监控小工具
    CentOS 7创建自定义KVM模板(现有KVM迁移到另外一台机)
    vi显示行号
    阿里云与微软云的对照表
    CentOS下安装Jenkins(Docker/war/tomcat/java -jar)
  • 原文地址:https://www.cnblogs.com/hobelee/p/15615746.html
Copyright © 2011-2022 走看看