SQL Server SUBSTRING Functions

本文介绍 SQL 中的 SUBSTRING 函数,该函数用于从指定位置开始截取字符串。通过一个实例展示了如何使用 SUBSTRING 函数从 'Mr.John' 中截取出 'John'。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SUBSTRING(string, start, length)函数,是处理字符数据获取子字符串。第一个参数是将要处理的字符串,第二个参数是指定位置开始,最后一个参数是截取长度。

例子:

原数据,如'Mr. John'

SELECT   SUBSTRING ( [ Name ] , 4 , 5 AS   [ Name ]   FROM   [ dbo ] . [ Member ]

 

执行结果 'John'。

 

### 创建和使用 SQL Server 自定义 Split 函数SQL Server 中,可以通过创建用户定义的表值函数来实现字符串分割功能。这种类型的函数可以返回一个表格形式的结果集,其中每一行代表原始字符串中的一个子串。 #### 使用 CLR 集成的方式创建 Split 函数 对于更高效的解决方案,可以选择通过 .NET Framework 的 Common Language Runtime (CLR) 来集成并编写 C# 或 VB.NET 代码作为扩展方法[^1]: ```csharp using System; using System.Collections.Generic; using Microsoft.SqlServer.Server; using System.Data.SqlTypes; public class UserDefinedFunctions { [SqlFunction(FillRowMethodName="FillSplitRow")] public static IEnumerable SplitString(string str, char separator){ List<string> result = new List<string>(); if (!string.IsNullOrEmpty(str)){ string[] parts = str.Split(separator); foreach(var part in parts){ result.Add(part.Trim()); } } return result; } public static void FillSplitRow(object obj, out SqlString value){ value = new SqlString((string)obj); } } ``` 此代码片段展示了如何利用 CLR 编写自定义 `Split` 函数,并将其注册到 SQL Server 数据库中以便调用。 #### 不依赖于 CLR 的 T-SQL 版本 Split 函数 如果不想启用 CLR 支持,则可以直接采用纯 T-SQL 方式构建类似的逻辑: ```sql CREATE FUNCTION dbo.fn_Split( @Input NVARCHAR(MAX), @Delimiter CHAR(1) ) RETURNS TABLE AS RETURN ( WITH Nums(n)AS(SELECT ROW_NUMBER()OVER(ORDER BY t1.number)-1 FROM master..spt_values t1 CROSS JOIN master..spt_values t2 WHERE t1.type='P' AND t2.type='P'), ParsedStrings(value, rn) AS ( SELECT CAST(SUBSTRING(@Input,n+1, CASE WHEN PATINDEX('%'+@Delimiter+'%',SUBSTRING(@Input+n,@Delimiter))=0 THEN LEN(@Input)-n ELSE PATINDEX('%'+@Delimiter+'%',SUBSTRING(@Input,n+1,LEN(@Input))) END ) as nvarchar(max)), ROW_NUMBER() OVER (ORDER BY n) FROM Nums WHERE SUBSTRING(@Input,n,1)=@Delimiter OR n=0 ) SELECT value FROM ParsedStrings ORDER BY rn ); GO ``` 上述脚本提供了一个基于递归公用表表达式的替代方案,在不借助外部编程语言的情况下实现了相同的功能[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值