sql截去最后一位_截取字符串中最后一个中文词语(MS SQL)

本文介绍了如何在MS SQL中处理表中字段,截取内容中的最后一个中文词语。通过去除字母、数字、标点,利用正则表达式和自定义函数实现。
摘要由CSDN通过智能技术生成

有朋友需求一个问题,就是处理一张表中某一字段,从这个字段中去截取内容中最后一个中文词语。

IDSourceTextResult1张达:U:1杨英苹:U:1,周忱:U:1,;苗桥:U:1,章玮:U:1,;2gaoying,高颖:U;3gaoying,高颖:U;4mq,苗桥;dingjian,丁健:U;zhangwei,章玮;zc,周忱;5xwj,向文杰;6dingjian,丁健;7mq;chendeyong;8gy,郭颖;9houwenjun,侯文君;lj,李军;sunle,孙乐;10dingjian,丁健:U;11dingjian,丁健:U;zhangwei,章玮;12wwm,王文明;zkl,张康亮;jiangyuan,蒋远;fyj,范云军;13dingjian,丁健;14fyj,范云军;wwm,王文明;zkl,张康亮;15lww,陆维巍;

Source Code

创建一个张来存储上面的数据:

SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE [dbo].[DataSource](    [ID] [int] IDENTITY(1,1) NOT NULL,    [SourceText] [nvarchar](100) NULL, --原始值    [Result] [nvarchar](100) NULL --处理结果) ON [PRIMARY]GO

Source Code

另外,你还要创建另外一张表,用来存储所有字符串中,分隔符号:

SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE [dbo].[Punctuation](    [ID] [int] IDENTITY(1,1) NOT NULL,    [Name] [nvarchar](2) NULL) ON [PRIMARY]GO

Source Code

把所有分隔的标点符号,添加入此表中:

处理数据,我们需要分好次来进行,先去除字母和数字:

得到的结果:

接下来,我们去除字符串的标点字符:

这一步,运行的结果如下:

越来越接近我们需求的结果了:

此时,我需要对处理的结果,再次处理,得需要了解下面二个函数:

《使用XQuery的nodes()方法实现字符拆分》http://www.cnblogs.com/insus/archive/2012/02/26/2368283.html

《MS SQL Server字符拆分函数》http://www.cnblogs.com/insus/p/3163564.html

其实二个函数,最终处理结果是一样的。就是分割字符串,然后放在一张表中

回到刚才的代码中,我们只管添加一行代码即可实现了我们的要求:

DECLARE @r INT = 1,@rs INT = 0    SELECT @rs = MAX([ID]) FROM [dbo].[DataSource]    WHILE @r <= @rs     BEGIN        DECLARE @Text NVARCHAR(100)        SELECT @Text = [SourceText] FROM [dbo].[DataSource] WHERE [ID] = @r         WHILE PATINDEX('%[A-Za-z0-9]%',@Text) > 0                 SET @Text = STUFF(@Text,PATINDEX('%[A-Za-z0-9]%',@Text),1,' ')                          DECLARE @x INT = 1,@xs INT = 0        SELECT @xs = MAX([ID]) FROM [dbo].[Punctuation]        WHILE @x <= @xs        BEGIN            DECLARE @p NVARCHAR(2)             SELECT @p = [Name]  FROM [dbo].[Punctuation] WHERE [ID] = @x                SET @Text = RTRIM(LTRIM(REPLACE(@Text,@p,' ')))                            SET @x = @x + 1        END        SELECT TOP 1 @Text = [WORD] FROM [dbo].[udf_Split](@Text,' ') WHERE LEN(ISNULL([WORD],''))> 0  ORDER BY [ID] DESC        UPDATE  [dbo].[DataSource] SET [Result] = @Text  WHERE  [ID] = @r        SET @r = @r + 1    ENDGO

Source Code

结果如下:

OK,这就是实现的全部过程。但是,我们应该不满足上面的代码。既然都使用正则来去除字母,数字,那标点符号可以使用正则来去除对吧。

所以说,我们不必再创建一个表来存储标点符号了。

DECLARE @r INT = 1,@rs INT = 0    SELECT @rs = MAX([ID]) FROM [dbo].[DataSource]    WHILE @r <= @rs     BEGIN        DECLARE @Text NVARCHAR(100)        SELECT @Text = [SourceText] FROM [dbo].[DataSource] WHERE [ID] = @r                WHILE PATINDEX('%[A-Za-z0-9:,;]%',@Text) > 0                 SET @Text = STUFF(@Text,PATINDEX('%[A-Za-z0-9:,;]%',@Text),1,' ')        SET @Text = LTRIM(RTRIM(@Text))        SELECT TOP 1 @Text = [WORD] FROM [dbo].[udf_Split](@Text,' ') WHERE LEN(ISNULL([WORD],''))> 0  ORDER BY [ID] DESC        UPDATE  [dbo].[DataSource] SET [Result] = @Text  WHERE  [ID] = @r        SET @r = @r + 1    END

Source Code

最终的结果一样,代码很了不少!!!

### 回答1: 可以使用 SUBSTRING 和 CHARINDEX 函数来实现: 假设你要截取的字符串为 @str,可以使用以下语句: ``` SELECT SUBSTRING(@str, CHARINDEX(',', @str) + 1, LEN(@str) - CHARINDEX(',', REVERSE(@str)) - CHARINDEX(',', @str)) ``` 这里使用了 REVERSE 函数来找到最后一个逗号的位置,然后用 LEN 函数减去第一个逗号和最后一个逗号之间的字符数,就可以得到需要截取的字符串。 ### 回答2: 在SQL Server,要截取一个字符串一个逗号和最后一个逗号之间的内容,可以使用一些内置的字符串函数来实现。 以下是一种可能的解决方案: 1. 首先,使用CHARINDEX函数找到第一个逗号的位置。该函数接受两个参数,第一个是要查找的字符串,第二个是要查找的字符或子字符串。例如,使用CHARINDEX(',', column_name)可以找到第一个逗号的位置。 2. 接下来,使用SUBSTRING函数从字符串的第一个逗号位置开始,截取到字符串的末尾。SUBSTRING函数接受三个参数,第一个是要截取的字符串,第二个是开始截取的位置,第三个是要截取的字符数。例如,使用SUBSTRING(column_name, CHARINDEX(',', column_name) + 1, LEN(column_name))可以截取从第一个逗号位置开始到字符串末尾的内容。 3. 最后,将截取得到的字符串与REVERSE函数一起使用,来找到最后一个逗号在截取的字符串的位置。REVERSE函数用于将给定字符串反转。例如,使用CHARINDEX(',', REVERSE(column_name))可以找到截取字符串最后一个逗号的位置。 4. 最后一步,使用SUBSTRING函数再次截取截取得到的字符串,从第一个字符开始到最后一个逗号的位置减一。例如,使用SUBSTRING(column_name, 1, LEN(column_name) - CHARINDEX(',', REVERSE(column_name)))可以截取第一个逗号和最后一个逗号之间的内容。 综上所述,要截取一个字符串一个逗号和最后一个逗号之间的内容,可以使用上述步骤来实现。注意,这只是一种可能的解决方案,还可以根据具体的需求和数据进行调整和优化。 ### 回答3: 在SQL Server,可以使用字符串函数和子查询来截取第一个逗号和最后一个逗号之间的字符串。 以下是一种可行的方法: 假设有一个名为"str"的字符串列,我们要截取其一个逗号和最后一个逗号之间的字符串。 首先,我们可以使用CHARINDEX函数找到第一个逗号的位置: DECLARE @firstComma INT SET @firstComma = CHARINDEX(',', str) 然后,我们可以使用SUBSTRING函数从第一个逗号的位置开始截取字符串,指定截取的长度为最后一个逗号的位置减去第一个逗号的位置: DECLARE @lastComma INT SET @lastComma = CHARINDEX(',', REVERSE(str)) SELECT SUBSTRING(str, @firstComma + 1, LEN(str) - @firstComma - @lastComma) AS result 其,LEN函数用于计算字符串的长度,REVERSE函数用于反转字符串,以便找到最后一个逗号的位置。 最后,将截取的字符串赋予一个别名,例如"result"。 以上是一种简单的方法来截取第一个逗号和最后一个逗号之间的字符串。根据具体情况,还可以使用其他字符串函数或者正则表达式来实现截取操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值