截取字元串中最後一個中文詞語(MS SQL)

来源:http://www.cnblogs.com/insus/archive/2017/11/23/7883606.html
-Advertisement-
Play Games

有朋友需求一個問題,就是處理一張表中某一欄位,從這個欄位中去截取內容中最後一個中文詞語。 ID SourceText Result 1 張達:U:1楊英蘋:U:1,周忱:U:1,;苗橋:U:1,章瑋:U:1,; 2 gaoying,高穎:U; 3 gaoying,高穎:U; 4 mq,苗橋;ding ...


有朋友需求一個問題,就是處理一張表中某一欄位,從這個欄位中去截取內容中最後一個中文詞語。

ID	SourceText	Result
1	張達: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 ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE 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 ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE 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
    END
GO
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

 

最終的結果一樣,代碼很了不少!!!

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • [20171124]bbed的使用問題2.txt--//bbed 是探究oracle數據塊的好工具,有時候不用轉儲,直接可以它看oracle內部塊的內部結構.--//在使用中要註意一些問題,昨天又犯類似錯誤,通過例子來說明:SCOTT@book> select rowid,dept.* from d ...
  • 1.索引無法存儲null值 a.單列索引無法儲null值,複合索引無法儲全為null的值。 b.查詢時,採用is null條件時,不能利用到索引,只能全表掃描。 為什麼索引列無法存儲Null值? a.索引是有序的。NULL值進入索引時,無法確定其應該放在哪裡。(將索引列值進行建樹,其中必然涉及到諸多 ...
  • 下載安裝包或者壓縮包 添加db存儲和日誌存儲文件夾 添加服務、配置環境變數、啟動Mongo 本例:安裝路徑:D:Program Files/MongoDB 配置文件的路徑:D:MongoDB 一、安裝,可選自定義安裝路徑 二、建立配置文件 logs文件夾內建立mongodb.log;etc文件夾內建 ...
  • 本文出處:http://www.cnblogs.com/wy123/p/7884986.html 周圍又有人在討論UNION和UNION ALL,對於UNION和UNION ALL,網上說的最多的就是性能問題(實在不想說出來這句話:UNION ALL比UNION快)其實根本不想炒UNION和UNIO ...
  • 一、mysqldump 1.備份test庫 2.備份 -B參數 3.備份 --compact 去除那些多餘的字元 4.mysql恢復 5.mysqldump的壓縮 gzip 6.mysqldump的壓縮恢復 gunzip 7.mysqldump只備份表結構 -d 8.mysqldump只備份表數據( ...
  • 這個系列大致想跟大家分享以下篇章(我會持續更新的↖(^ω^)↗): 1、mongo 3.4分片集群系列之一:淺談分片集群 2、mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3、mongo 3.4分片集群系列之三:搭建分片集群--哈希分片 + 安全 4、mongo 3.4分片集群系列之 ...
  • 直接上例子,即SQL語法: DECLARE @Text NVARCHAR(MAX) = N'192 168-0 101 34--96' WHILE (CHARINDEX('--',@Text) <> 0) SET @Text = REPLACE(@Text,'--','-') SELECT @Tex ...
  • HiveServer2是經常與beeline一起使用,可以用jdbc客戶端遠程連接,一般用於生產環境。 在提供傳統客服端的功能之外,還提供其他功能。 Beeline連接 啟動命令:HiveServer2 啟動日誌在hive.log中查看 命令: Beeline !connect jdbc:hive2 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...