首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

[原创]sqlserver2005 从大文本字段中查寻某关键字对应的内容

2013-01-23 
[原创]sqlserver2005 从大文本字段中查找某关键字对应的内容在我自己工作中,要处理各种不同电子病例模板的

[原创]sqlserver2005 从大文本字段中查找某关键字对应的内容

在我自己工作中,要处理各种不同电子病例模板的数据,一些电子病例数据存放于数据库的大文本字段中,在我们自己系统中又要求重要的域要分开和提供接口供别人调用,我们需要把这些数据进行拆分,如拆分出:

入院情况;出院时间;住院经过;出院情况;出院医嘱;出院嘱托;出院带药;入院诊断;出院诊断;病理诊断;
因为模板不同,每个域的位置会不一样或者没有,所以我决定写一个函数来处理,下面我说一下我的做法:

字段内容如:

CREATE FUNCTION [dbo].[Func_GetDomainFromText](@value VARCHAR(MAX),@keyword VARCHAR(20))RETURNS VARCHAR(MAX)/* * 描述:从备注信息中找出某部分数据,如出院诊断。 * 作者:罗毅 * 例子:select top 20 dbo.Func_GetDomainFromText(LeaveSituation,'出院诊断') FROM RS_MyTable*/BEGIN--先去掉Html符号DECLARE @T VARCHAR(MAX)SET @T = dbo.regexReplace(@value,'<.+?>', '', 1, 1)--预设置节点DECLARE @Items TABLE(Name varchar(20),Pos INT)INSERT INTO @Items VALUES('入院情况',CHARINDEX('入院情况',@T))INSERT INTO @Items VALUES('出院时间',CHARINDEX('出院时间',@T))INSERT INTO @Items VALUES('住院经过',CHARINDEX('住院经过',@T))INSERT INTO @Items VALUES('出院情况',CHARINDEX('出院情况',@T))INSERT INTO @Items VALUES('出院医嘱',CHARINDEX('出院医嘱',@T))INSERT INTO @Items VALUES('出院嘱托',CHARINDEX('出院嘱托',@T))INSERT INTO @Items VALUES('出院带药',CHARINDEX('出院带药',@T))INSERT INTO @Items VALUES('入院诊断',CHARINDEX('入院诊断',@T))INSERT INTO @Items VALUES('出院诊断',CHARINDEX('出院诊断',@T))INSERT INTO @Items VALUES('病理诊断',CHARINDEX('病理诊断',@T))DELETE FROM @Items WHERE Pos = 0--获取keyword对应的位置DECLARE @p1 INTDECLARE @p2 INTDECLARE @F  INTDECLARE @Res VARCHAR(MAX)SET @F = 5SET @p1 = -1SET @p2 = -1SET @p1 = CHARINDEX(@keyword,@T)IF @p1 <= 0 RETURN ''SELECT TOP 1 @p2=Pos FROM @Items WHERE Pos > @p1 ORDER BY PosIF (@p2 <= @p1) --当前关键字在组中位于最后,则取后面所有数据SET @Res = SUBSTRING(@T,@p1+@F,len(@T)-@p1-@F)ELSE --这里的偏移量5,是因为文本中存在冒号,如“出院诊断:”SET @Res = SUBSTRING(@T,@p1+@F,@p2-@p1-@F) RETURN @ResEND


如有不足之处,希望大家指出,我即时修改。

2楼daling535昨天 11:07
4 rt`1
1楼daling535昨天 11:07
3

热点排行