`
逆风的香1314
  • 浏览: 1416012 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ntext搜索关键字

Go 
阅读更多

/*--ntext搜索

 按 tb 表中的 keyword 在 ta 中查找 content
 列出每个 keyword 在 content 中的具体位置
--邹建 2004.07(引用请保留此信息)--*/

--测试数据
create table ta(id int identity(1,1),content ntext)
insert ta select '我是中国人我是中国人'
union all select '中国人民爱中国 中国人民爱中国 中国人民爱中国 中国人民爱中国'

create table tb(keyword nvarchar(100))
insert tb select '中'
union all select '中国'
go

/*=================处理========================*/
if exists (select * from dbo.sysobjects where id = object_id(N'[序数表]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [序数表]
GO

--为了效率,所以要一个辅助表配合
select top 4000 id=identity(int,1,1) into 序数表
from syscolumns a,syscolumns b
alter table 序数表 add constraint pk_id_序数表 primary key(id)
go

--创建处理的存储过程
create proc p_search
as
create table #t(id int,keyword nvarchar(100),position int)

declare @s Nvarchar(4000),@keyword nvarchar(100)
declare @id int,@i int,@ilen int

declare tb cursor local for
select a.id,b.keyword,position=charindex(b.keyword,a.content)-1,ilen=4000-len(b.keyword)
from ta a,tb b
where charindex(b.keyword,a.content)>0

open tb
fetch tb into @id,@keyword,@i,@ilen
while @@fetch_status=0
begin
 select @s=substring(content,@i+1,4000)
 from ta where id=@id
 while @s<>''
 begin
  insert #t(id,keyword,position)
  select @id,@keyword,id+@i
  from 序数表
  where charindex(@keyword,@s,id)=id

  select @i=@i+@ilen,@s=substring(content,@i+1,4000)
  from ta where id=@id
 end
 
 fetch tb into @id,@keyword,@i,@ilen
end
close tb
deallocate tb
select * from #t
go

--调用示例
exec p_search
go

--删除测试
drop table 序数表,ta,tb
drop proc p_search

/*--测试结果

id          keyword   position 
----------- --------- ----------
1           中        3
1           中        8
1           中国      3
1           中国      8
2           中        1
2           中        6
2           中        9
2           中        14
2           中        17
2           中        22
2           中        25
2           中        30
2           中国      1
2           中国      6
2           中国      9
2           中国      14
2           中国      17
2           中国      22
2           中国      25
2           中国      30

(所影响的行数为 20 行)
--*/

分享到:
评论

相关推荐

    SQL Server 中 text或ntext 字段内容替换方法

    在不确定text或ntext字段长度的时候 SQL Server 中 text或ntext 字段内容替换方法

    帝国CMS列表页面调用关键字TAG的方法

    - 代码中提到的变量(如$nsmalltext、$ntext、$newtext、$keyboard等)需要与帝国CMS系统中定义的变量相匹配,否则代码将无法正常工作。 - 在代码中定义的变量(如$tempid)可以按照实际需求进行修改,例如修改搜索...

    SQL-Server常用关键字、数据类型和常用语法.docx

    字符类型包括`char`、`nchar`、`varchar`、`varchar(MAX)`、`nvarchar`、`nvarchar(MAX)`、`text`和`ntext`,它们用于存储文本数据,其中`char`和`nchar`为固定长度,`varchar`和`nvarchar`为可变长度,`MAX`表示...

    Toolbelt_Blazor_I18nText-master.rar

    【标题】:Toolbelt Blazor I18nText 源码分析 Toolbelt Blazor I18nText 是一个专门为Blazor应用提供国际化(I18n)支持的开源库。Blazor是Microsoft推出的一个用于构建Web应用程序的框架,它允许使用C#和Razor...

    SQL中函数 replace 的参数1的数据类型ntext无效的解决方法

    然而,在某些情况下,特别是涉及大数据类型如`ntext`时,可能会遇到“参数1的数据类型ntext无效”的错误。这是因为`REPLACE`函数不直接支持`ntext`这种大型文本数据类型。 `ntext`在SQL Server中是用来存储大量文本...

    pymssql ntext字段调用问题解决方法

    然而,当你尝试从包含`ntext`字段的SQL Server表中检索数据时,可能会遇到一个特定的错误。这个错误通常表现为“Unicode数据在仅支持Unicode的排序规则或ntext数据不能发送到使用DB-Library(如ISQL)或ODBC 3.7或更...

    SQLserver查询数据类型为ntext是空或NULL值的方法

    SQLserver 查询数据类型为 ntext 是空或 NULL 值的方法 在 SQLserver 中,ntext 数据类型是一种文本数据类型,用于存储大容量的文本数据。但是,在查询数据类型为 ntext 的表时,遇到空或 NULL 值的情况时,需要...

    php读取mssql的ntext字段返回值为空的解决方法

    当尝试获取ntext字段的内容时,可能会出现空值或者错误。有两种主要的解决策略: 1. **修改字段类型**:最直接的解决方案是将ntext字段修改为text字段。text字段在PHP中是可以正常处理的。如果权限允许,可以直接在...

    sqlserver 中ntext字段的批量替换(updatetext的用法)

    这是因为`ntext`类型的字段不支持某些T-SQL标准操作,如直接使用聚合函数或在`WHERE`子句中进行文本搜索。本篇文章将详细介绍如何解决这一问题,特别是在处理`ntext`字段的批量替换时,利用`updatetext`语句来实现。...

    Toolbelt.Blazor.I18nText:该类库提供了在Blazor应用程序上本地化文本的功能!

    Blazor国际化(I18n)文本 概要 该软件包是在Blazor Web App中本地化文本的另一种方法!... 您可以将使用“ Blazor I18nText”本地化的库打包为NuGet包。 注意 现在,Blazor WebAssembly从v.3.2 Pr

    SQLServer和MySql语法和关键字的区别详解

    2. **字符类型**: SQLServer 支持 `nchar`, `nvarchar`, 和 `ntext` 这些 Unicode 字符类型,MySQL 不支持这些类型,而是使用 `char`, `varchar`, 和 `text` 类型来处理字符数据。 3. **自动增长字段**: MySQL 使用 ...

    mssql查找备注(text,ntext)类型字段为空的方法

    在SQL Server中,`text`和`ntext`数据类型是用来存储大文本数据的,它们与常规的字符串数据类型如`varchar`或`nvarchar`有所不同。当你试图像处理普通字符字段那样直接用`=`操作符来检查`text`或`ntext`字段是否为空...

    sql ntext数据类型字符替换实现代码

    代码如下: —ntext数据类型字符替换 create table tt ( sid INT IDENTITY(1,1), cont ntext ) go insert into tt(cont) values(N’fd sad fdsa 涂聚文工团 缔友计算机信息技术有限公司 可能性 桔柑 ‘) go update tt...

    SQL中NTEXT字段内容显示&amp;lt;long text&amp;gt;的原因

    在SQL Server中,`NTEXT`数据类型是用来存储大量Unicode文本数据的,最多可以存储2^31-1个字符,即约2GB的文本。然而,在某些情况下,当你尝试查看`NTEXT`字段的内容时,可能会看到字段值被显示为`&lt;long text&gt;`,这...

Global site tag (gtag.js) - Google Analytics