第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

截取字符串中最后一個(gè)中文詞語(MS SQL)

標(biāo)簽:
MySQL

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

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

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

 

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

 

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報(bào)

0/150
提交
取消