SQLClr 切分中英文

来源:互联网 发布:红色警戒3起义时刻mac 编辑:程序博客网 时间:2024/05/17 07:55
注:必须先下载 sqlclr的dll文件, 配合脚本安装到库中。下载地址:点击打开链接
--请注意!!!!!--A. 请将 [master] 替换为当前库--B. 请将主程序集的dll路径替换为当前库中的路径--C. 出现错误:在 master 数据库中记录的数据库所有者 SID 与在数据库 'dbName' 中记录的数据库所有者 SID 不同。--   应该通过使用 ALTER AUTHORIZATION 语句重置数据库 'db_Study' 的所有者来更正此情况。--   Sp_changedbowner 'sa',trueUSE [master]GO--1. 在SQL Server中启用CLRexec sp_configure 'clr enabled', 1 reconfigure;  go  --2. 在目标库 [master] 设置TRUSTWORTHY为ONALTER DATABASE [master] SET TRUSTWORTHY ON--3. 删除主程序集已有对象dbIF OBJECT_ID('[dbo].[Fun_DBA_IsMatch]') IS NOT NULLDROP FUNCTION [dbo].[Fun_DBA_IsMatch]GOIF OBJECT_ID('[dbo].[Fun_DBA_IsChinese]') IS NOT NULLDROP FUNCTION [dbo].[Fun_DBA_IsChinese]GOIF OBJECT_ID('[dbo].[Fun_DBA_GetHTML]') IS NOT NULLDROP FUNCTION [dbo].[Fun_DBA_GetHTML]GOIF OBJECT_ID('Fun_SplitChineseAndEnglish') IS NOT NULLDROP FUNCTION Fun_SplitChineseAndEnglishGO--4. 删除主程序集 SqlClrIF EXISTS(SELECT * FROM SYS.ASSEMBLIES WHERE NAME='SqlClr') DROP  ASSEMBLY SqlClrGO--5. 创建主程序集: SqlClrCREATE ASSEMBLY SqlClr FROM 'D:\Tools\DBA\SqlClr\SqlClr.dll' WITH PERMISSION_SET = UNSAFEGO-- =============================================-- Author:yenange-- Create date: 2014-11-25-- Description:正则表达式匹配-- =============================================CREATE FUNCTION [dbo].[Fun_DBA_IsMatch]   (       @source AS NVARCHAR(MAX),  --要匹配的文本    @pattern AS NVARCHAR(200),  --进行匹配的正则表达式@option INT=3  --正则表达式匹配选项,1为忽略大小写,2为多行匹配,3为忽略大小写且多行匹配)   RETURNS BIT   AS       EXTERNAL NAME [SqlClr].[SqlClr.SqlCLR].[IsMatch];   GO  -- =============================================-- Author:yenange-- Create date: 2014-11-25-- Description:判断字符串是否为中文-- =============================================CREATE FUNCTION [dbo].[Fun_DBA_IsChinese]   (       @source AS NVARCHAR(MAX)  --要匹配的文本)   RETURNS BIT   AS       EXTERNAL NAME [SqlClr].[SqlClr.SqlCLR].[IsChinese];   GO  -- =============================================-- Author:yenange-- Create date: 2016-10-20-- Description:根据Url获取html-- =============================================CREATE FUNCTION [dbo].[Fun_DBA_GetHTML]   (       @url AS NVARCHAR(MAX)  --url)   RETURNS NVARCHAR(MAX)  AS       EXTERNAL NAME [SqlClr].[SqlClr.SqlCLR].[Fun_GetHTML];   GOIF OBJECT_ID('Fun_SplitChineseAndEnglish') IS NOT NULLDROP FUNCTION Fun_SplitChineseAndEnglishGO-- =============================================-- Author:yenange-- Create date: 2014-11-25-- Description:切分中英文-- =============================================CREATE FUNCTION [dbo].Fun_SplitChineseAndEnglish   (       @source AS NVARCHAR(MAX)  --要匹配的文本)   RETURNS @r TABLE(rowNum INT IDENTITY(1,1) PRIMARY KEY,string NVARCHAR(max),isChinese BIT)   ASBEGINDECLARE @single NCHAR(1),@rowNum INTWHILE len(@source)>0BEGINSET @single=substring(@source,1,1)SELECT @rowNum=isnull(MAX(rowNum),0) FROM @rIF dbo.Fun_DBA_IsChinese(@single)=1BEGINIF EXISTS(SELECT * FROM @r WHERE rowNum=@rowNum AND isChinese=1)UPDATE @r SET string=string+@single WHERE rowNum=@rowNumELSEINSERT INTO @r (string,isChinese) VALUES(@single,1)ENDELSEBEGINIF EXISTS(SELECT * FROM @r WHERE rowNum=@rowNum AND isChinese=0)UPDATE @r SET string=string+@single WHERE rowNum=@rowNumELSEINSERT INTO @r (string,isChinese) VALUES(@single,0)ENDSET @source=SUBSTRING(@source,2,LEN(@source))ENDRETURNENDGO



示例代码:

DECLARE @s NVARCHAR(MAX)SET @s='被子植物门 Angiospermae双子叶植物纲 Dicotyledoneae原始花被亚纲 Archichlamydeae伞形目 Umbelliflorae五加科 Araliaceae多蕊木族 PLERANDREAE五加属 Acanthopanax五加组 Sect. Acanthopanax'SELECT * FROM dbo.Fun_SplitChineseAndEnglish(@s)

结果: