志铭-2021年10月10日 23:56:04

0. 加号(+)

SELECT 'abc'+'123'结果:abc123

注意若是varchar 类型+int 类型,需要将int类型转换为varchar类型,方能作为字符串相加

SELECT 'abc' + CAST(18 AS VARCHAR(10)) 结果:abc18

1. LEFT和RIGHT

  • 【定义】

    LEFT()返回从左往右指定长度的子字符串。

    RIGHT()返回从右往左指定长度的子字符串。

  • 【语法】

    LEFT(expressionString,lengthInt)

    RIGHT(expressionString,lengthInt)

    • 注意第二个参数是期望保留的长度
  • 【示例】

    SELECT LEFT('abc',2)返回ab

    SELECT RIGHT('abc',2)返回bc

2. SUBSTRING

  • 【定义】 SUBSTRING()函数用于从字符串中提取子串

  • 【语法】 SUBSTRING(expressionString,startInt,lengthInt)

    对字符串string,从start索引位置开始,返回length长度的子字符串

    注意这里的索引是从1开始数的

  • 【示例】 SELECT SUBSTRING('abcdef',2,3)结果:bcd

  • 【注意】 若是期望从某个起始位置开始获取直到结尾的所有字符,可以使用一个比目标字符串长度还大的值作为截取子串的长度参数,SUBSTRING将返回最大起始位置到目标字符串的结尾,而不会将多出的长度以空格填充。

    SELECT SUBSTRING('abc',1,9)结果是:"abc",而不是"abc "

3. LEN和DATALENGTH

  • 【定义】

    LEN函数返回指定字符串的字符数

    DATALENTH返回的是指定字符串的字节数

  • 【语法】

    LEN(expressionString)

    DATALENGTH(expressionString)

  • 【示例】

    SELECT LEN('abc')结果:3

    SELECT LEN('张三')结果:2

    SELECT DATALENGTH('abc')结果:3

    SELECT DATALENGTH(N'abc')结果:6

    SELECT DATALENGTH('张三')结果:4

  • 【注意】

    LEN函数是计算的是不包含尾随的空格,而DATALENGTH是会包含尾随的空格

    SELECT LEN('ab ')结果:2

    SELECT DATALENGTH('ab ')结果:3

4. CHARINDEX和PATINDEX

  • 【定义】

    CHARINDEX用于寻找某一个字符在目标字符串第一次出现的起始位置(从1开始数

    PATINDEX用于寻找某个模式的子字符串在目标字符串中第一次出现的起始位置

  • 【语法】

    • CHARINDEX(str2Find,str2Search)

      • 注意第一个参数是待寻找的子串
    • PATINDEX('%pattern%',str2Search)
  • 【示例】

    SELECT CHARINDEX('ab','abcab')结果:1

    • 这里'ab'在‘abcab'中出现两次,但是CHARINDEX函数返回的是第一次出现的位置

    SELECT PATINDEX('%[0-9]%','abc123abc')结果:4

    SELECT PATINDEX('a%','abc123')结果:1

    SELECT PATINDEX('a_c%','abc123')结果:1

    • 这里的第一个参数是和LIKE谓词后的模式规则相同

5. REPLACE

  • 【定义】REPLACE函数可以将目标字符串中所有出现的某个子字符串替换为指定的字符串

  • 【语法】

    REPLACE(expressionString,patternString,replacementString)

  • 【示例】

    • 将字符串中的'ab'替换为'AB'

      • SELECT REPLACE('ab222ab333ab444','ab','AB')结果:AB222AB333AB444
    • 将字符串中的'ab'全部删除(即全部替换为空格)
      • SELECT REPLACE('ab222ab333ab444','ab','')结果:222333444

6. REPLICATE和SAPCE

  • 【定义】

    REPLICATE用于将指定的字符串复制指定的次数

    SPACE用于返回指定长度的空格

  • 【语法】

    REPLICATE(expressString,nInt)

    SPACE(nInt)

  • 【示例】

    SELECT REPLICATE('abc',3)结果:abcabcabc

    SELECT DATALENGTH(SPACE(10))结果:10

7. STUFF

  • 【定义】

    将字符串中的一部分替换为另外一个子字符串。

    用于替换的子字符串不需要和被替换的部分长度一样。

  • 【语法】

    STUFF(expressionString,startInt,lengthInt,expressionString2)

  • 【示例】

    • 将目标字符串中从第4个字符之后的三个字符替换为指定的字符串

      SELECT STUFF('abc123def',4,3,'66666666')结果:abc66666666def

    • 将目标字符串中的第一个字符替换为空格(相当于删除目标字符串的第一个字符)

      SELECT STUFF(',a,b,c',1,1,'')结果:a,b,c

8. REVERSE

  • 【定义】用于将指定的字符串中的字符颠倒过来

  • 【语法】

    REVERSE(expressionString)

  • 【示例】

    SELECT REVERSE('abc')结果:cba

9. UPPER和LOWER

  • 【定义】将指定的字符串全部转换为大写或小写

  • 【语法】

    UPPER(expressionString)

    LOWER(expressionString)

  • 【示例】

    SELECT UPPER('aBc')结果:ABC

    SELECT LOWER('aBc')结果:abc

10. LTRIM和RTRIM

  • 【定义】用于将指定的字符串的前导空格和尾随空格删除

  • 【语法】

    LTRIM(expressionString)

    RTRIM(expressionString)

  • 【示例】

    • 删除字符串前端的空格

      SELECT LTRIM(' abc')结果:abc
    • 删除字符串后端的空格

      SELECT RTRIM('abc ')结果:abc
    • 同时删除字符串前后的空格

      SELECT LTRIM(RTRIM(' abc '))结果:abc

11. QUOTENAME

  • 【定义】默认用于给指定的字符串外加一个方括号

    这个函数的第二个参数是可选的,第二个参数只能是英文逗号(,)、英文引号(")或默认的方括号(])

  • 【语法】

    QUOTENAME(expressionString,[character])

  • 【示例】

    SELECT QUOTENAME('Name')结果:[Name]

    SELECT QUOTENAME('Name',')')结果:(Name)

    SELECT QUOTENAME('Name','"')结果:"Name"

12. 综合使用示例

删除字符串最后一位

DECLARE @a VARCHAR(100)='a,b,c,'
--SELECT LEN(@a)--结果:6 --法1
SELECT LEFT(@a,LEN(@a)-1)
--结果:a,b,c --法2
SELECT STUFF(@a,LEN(@a),1,'')
--结果:a,b,c

计算某个字符串出现的次数

  • 实现思路:将需要计算特定子串出现的次数,全部替换为空格,之后使原始长度减去替换后的长度,即为特定子串出现的次数
DECLARE @str VARCHAR(100)='abcabc'
DECLARE @oldLength INT =LEN(@str)--@oldLength=6
DECLARE @newStr VARCHAR(100)=REPLACE(@str,'a','')--@newStr=bcbc
DECLARE @newLength INT=LEN(@newStr)--@newLength=4
SELECT @oldLength-@newLength--结果:2

字符串统一长度,不足则前面补零

  • 实现思路:甭管当前的长度,一律在该字符串前面加上9个0,之后在从右往左截取指定长度的子串作为结果值
DECLARE @tableVar TABLE
(
No VARCHAR(100) NOT NULL
);
INSERT INTO @tableVar
(
No
)
VALUES
('1'),
('12'),
('123'),
('1234'),
('1234'); --字符串统一长度为10,不足则前位补0
SELECT RIGHT(REPLICATE('0', 9) + No, 10)FROM @tableVar;--法1
SELECT REPLICATE('0', 10 - LEN(No)) + No AS NO FROM @tableVar;--法2 --结果
--0000000001
--0000000012
--0000000123
--0000001234
--0000001234 --字符串统一长度,不足则使用空格在后面补足
SELECT No + SPACE(10 - LEN(No)) FROM @tableVar;--法1
SELECT LEFT(NO+SPACE(10),10) FROM @tableVar;--法2 --验证上述操作:
SELECT DATALENGTH(No + SPACE(10 - LEN(No))) FROM @tableVar--验证法1
SELECT DATALENGTH( LEFT(NO+SPACE(10),10)) FROM @tableVar --验证法2 --结果:
--10
--10
--10
--10
--10

积累待补充中……

T-SQL——函数——字符串操作函数的更多相关文章

  1. Sql字符串操作函数

    1.去空格函数 (1).LTRIM() 把字符串头部的空格去掉. (2).RTRIM() 把字符串尾部的空格去掉. 2.字符转换函数(1).ASCII()返回字符表达式最左端字符的ASCII 码值.在 ...

  2. SQL 字符串操作函数

    SQL 字符串操作函数 学习了: https://www.cnblogs.com/wangzhe688/p/6046654.html 一.字符转换函数 1.ASCII() 返回字符表达式最左端字符的A ...

  3. [转]SQL Server字符串处理函数大全

    select语句中只能使用sql函数对字段进行操作(链接sql server), select 字段1 from 表1 where 字段1.IndexOf("云")=1;这条语句不 ...

  4. Postgresql 字符串操作函数

    样例测试: update property set memorial_no = btrim(memorial_no, ' ') where memorial_no like ' %' 或:update ...

  5. Postgresql数据库的一些字符串操作函数

    今天做项目遇到客户反映了一个麻烦的事情,有一些数据存在,但就是在程序中搜索不出来,后来分析,发现问题为数据前面有几个空白字符,后来用SQL查询了一下,发现八九个数据表中,数千万条数据中有将近三百万条数 ...

  6. JavaScript中常见的字符串操作函数及用法

    JavaScript中常见的字符串操作函数及用法 最近几次参加前端实习生招聘的笔试,发现很多笔试题都会考到字符串的处理,比方说去哪儿网笔试题.淘宝的笔试题等.如果你经常参加笔试或者也是一个过来人,相信 ...

  7. 转:C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文

    转自:C语言字符串操作函数 - strcpy.strcmp.strcat.反转.回文 C++常用库函数atoi,itoa,strcpy,strcmp的实现 作者:jcsu C语言字符串操作函数 1. ...

  8. C语言的常用字符串操作函数(一)

    一直做的是单片机相关的程序设计,所以程序设计上更偏向底层,对于字符串的操作也仅限于液晶屏幕上的显示等工作,想提高下字符串操作的水平,而不是笨拙的数组替换等方式,翻看帖子发现C语言的字符串操作函数竟然这 ...

  9. sql server 字符串替换函数REPLACE

    sql server 字符串替换函数REPLACE函数的使用 <pre name="code" class="sql">--参数1:需要替换字符的母 ...

随机推荐

  1. ant的javac任务的相关属性配置

    任务和javac命令是相似,它编译两种类型的Java文件1)没有被编译的java文件2)曾经编译过,但是class文件版本和当前对应的java文件版本不匹配的java文件. 1)javac命令支持的参 ...

  2. TiDB基本简介

    一.TiDB整体架构 与传统的单机数据库相比,TiDB具有以下优势: 纯分布式架构,拥有良好的扩展性,支持弹性的扩缩容 支持SQL,对外暴露MySQL的网络协议,并兼容大多数MySQL的语法,在大多数 ...

  3. request请求《一》

    1. request对象通常用来接收客户端提交到服务端的数据,如:在servlet或者action中可以用request.getParameter()的方法获取获取参数内容: 2. requestSc ...

  4. 解决 conda tensorflow failed to create cublas handle: CUBLAS_STATUS_NOT_INITIALIZED

    参考解决方案1:https://stackoverflow.com/questions/38303974/tensorflow-running-error-with-cublas 参考解决方案2:ht ...

  5. Gogs (Go git server) 使用笔记

    issue: 话题,一个新特性,BUG或其他关注的任何话题,都可创建issure,便于讨论,明确目标. label: 标签,一般用于描述issue的类型,如:bug.feature.enhanceme ...

  6. 前端axios请求二进制数据流转换生成PDF文件空白问题(终极解决方案)

    本文章共1570字,预计阅读时间1 - 3分钟. 问题场景: axios请求二进制数据转换生成PDF空白问题,使用axios请求后端接口,后端返回的二进制流文件,需要转换成PDF,但是在postman ...

  7. 通俗易懂讲解Word2vec的本质

    本文首发于微信公众号「对白的算法屋」,来一起学AI叭 一.Word2vec CBOW(Continuous Bag-of-Words):每个词的含义都由相邻词决定. Skip-gram:依据分布的相似 ...

  8. SprinBoot-SpringData-整合

    目录 SpringData 整合JDBC JDBCTemplate 整合Druid 配置数据源 配置Druid数据源监控 整合MyBatis 整合测试 整合Redis 测试整合 序列化配置 自定义re ...

  9. JVM-调优-命令

    目录 jps 命令格式 option参数 示例 jstat 命令格式 参数 option 参数总览 option 参数详解 -class -compiler -gc -gccapacity -gcut ...

  10. 比年轻更年轻,快看能否接棒B站?

    撰文 |懂懂 编辑 | 秦言 来源:懂懂笔记 背靠超新Z世代,快看能否接棒B站? 国漫什么时候能追上日漫? 国漫作者真能挣到钱吗? 国漫什么时候才能走向世界? 这是中国漫画从业者的"灵魂三问 ...