求一select 语句,请高手帮忙! declare @str varchar(20)set @str='召集'select * from 表 where content like '%<'+@str+'>'+@str+'了%' 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在<和>之间有N还有多字符呢!!? 你的字段是ntext的类型,还是nvarchar的? 那么查询非常困难的了!给你个建议,因为它是标题对吧!你用nvarchar的类型来做!要不非常难查询。给你转个皱老大的例子,你就知道有多难处理了!:)转: --测试数据CREATE TABLE tb(col ntext)INSERT tb VALUES(REPLICATE( '0001,0002,0003,0004,0005,0006,0007,0008,0009,0100,' +'220000001,302000004,500200006,700002008,900002120,',800))DECLARE @p binary(16)SELECT @p=TEXTPTR(col) FROM tbUPDATETEXT tb.col @p NULL 0 tb.col @pGO--替换处理定义DECLARE @s_str nvarchar(1000),@r_str nvarchar(1000)SELECT @s_str='00' --要替换的字符串 ,@r_str='0000' --替换成该字符串DECLARE @p varbinary(16)DECLARE @start int,@s nvarchar(4000),@len intDECLARE @s_len int,@step int,@last_repl int,@pos int--替换处理参数设置SELECT --用于要判断每次截取数据,最后一个被替换数据位置的处理 @s_len=LEN(@s_str), --设置每次应该截取的数据的长度,防止REPLACE后数据溢出 @step=CASE WHEN LEN(@r_str)>LEN(@s_str) THEN 4000/LEN(@r_str)*LEN(@s_str) ELSE 4000 END--替换处理的开始位置SELECT @start=PATINDEX('%'+@s_str+'%',col), @p=TEXTPTR(col), @s=SUBSTRING(col,@start,@step), @len=LEN(@s), @last_repl=0FROM tbWHERE PATINDEX('%'+@s_str+'%',col)>0 AND TEXTVALID('tb.col',TEXTPTR(col))=1WHILE @len>=@s_lenBEGIN --得到最后一个被替换数据的位置 WHILE CHARINDEX(@s_str,@s,@last_repl)>0 SET @last_repl=@s_len +CHARINDEX(@s_str,@s,@last_repl) --如果需要,更新数据,同时判断下一个取数位置的偏移量 IF @last_repl=0 SET @last_repl=@s_len ELSE BEGIN SELECT @last_repl=CASE WHEN @len<@last_repl THEN 1 WHEN @len-@last_repl>=@s_len THEN @s_len ELSE @len-@last_repl+2 END, @s=REPLACE(@s,@s_str,@r_str), @pos=@start-1 UPDATETEXT TB.col @p @pos @len @s END --获取下一个要处理的数据 SELECT @start=@start+LEN(@s)-@last_repl+1, @s=SUBSTRING(col,@start,@step), @len=LEN(@s), @last_repl=0 FROM tbENDGO--显示处理结果SELECT datalength(col),* FROM tbDROP TABLE tb declare @str varchar(20)set @str='召集'select top 1 * from 表 where content like '%<'+@str+'>'+@str+'了%' --按照个数判断,超过两个的就是。declare @str varchar(20)select @str='召集'select *from 表where len(content)-len(replace(content,'召集',''))>2*len(@str) 第三条:<……召集……>在研项目负责人专门会议,将《关于加强国家社科基金项目经费管理的通知》向在研项目负责人转发,并和在研项目负责人一起研究了相关精神同样第三条也不要! 这条SQL怎么优化 菜鸟提问,高手来啊 跪求帮助:为什么插入不了数据?? SQL语句的问题 连接远程数据库 数据库日志管理问题 sql2k语句问题,急!!拜谢了!!!!!!!!!( 子查询优化问题 请问在程序中(存储过程中)怎样修改sql server注册属性啊?? 关于自动增加ID的问题.....请大家来说说.... 请问:有关视图的问题 请vivianfdlpw()来接分!
--测试数据
CREATE TABLE tb(col ntext)
INSERT tb VALUES(REPLICATE( '0001,0002,0003,0004,0005,0006,0007,0008,0009,0100,'
+'220000001,302000004,500200006,700002008,900002120,',800))
DECLARE @p binary(16)
SELECT @p=TEXTPTR(col) FROM tb
UPDATETEXT tb.col @p NULL 0 tb.col @p
GO--替换处理定义
DECLARE @s_str nvarchar(1000),@r_str nvarchar(1000)
SELECT @s_str='00' --要替换的字符串
,@r_str='0000' --替换成该字符串DECLARE @p varbinary(16)
DECLARE @start int,@s nvarchar(4000),@len int
DECLARE @s_len int,@step int,@last_repl int,@pos int--替换处理参数设置
SELECT
--用于要判断每次截取数据,最后一个被替换数据位置的处理
@s_len=LEN(@s_str), --设置每次应该截取的数据的长度,防止REPLACE后数据溢出
@step=CASE WHEN LEN(@r_str)>LEN(@s_str)
THEN 4000/LEN(@r_str)*LEN(@s_str)
ELSE 4000 END--替换处理的开始位置
SELECT @start=PATINDEX('%'+@s_str+'%',col),
@p=TEXTPTR(col),
@s=SUBSTRING(col,@start,@step),
@len=LEN(@s),
@last_repl=0
FROM tb
WHERE PATINDEX('%'+@s_str+'%',col)>0
AND TEXTVALID('tb.col',TEXTPTR(col))=1
WHILE @len>=@s_len
BEGIN
--得到最后一个被替换数据的位置
WHILE CHARINDEX(@s_str,@s,@last_repl)>0
SET @last_repl=@s_len
+CHARINDEX(@s_str,@s,@last_repl) --如果需要,更新数据,同时判断下一个取数位置的偏移量
IF @last_repl=0
SET @last_repl=@s_len
ELSE
BEGIN
SELECT @last_repl=CASE
WHEN @len<@last_repl THEN 1
WHEN @len-@last_repl>=@s_len THEN @s_len
ELSE @len-@last_repl+2 END,
@s=REPLACE(@s,@s_str,@r_str),
@pos=@start-1
UPDATETEXT TB.col @p @pos @len @s
END
--获取下一个要处理的数据
SELECT @start=@start+LEN(@s)-@last_repl+1,
@s=SUBSTRING(col,@start,@step),
@len=LEN(@s),
@last_repl=0
FROM tb
END
GO--显示处理结果
SELECT datalength(col),* FROM tb
DROP TABLE tb
set @str='召集'select top 1 * from 表 where content like '%<'+@str+'>'+@str+'了%'
declare @str varchar(20)
select @str='召集'
select *
from 表
where len(content)-len(replace(content,'召集',''))>2*len(@str)
<……召集……>在研项目负责人专门会议,将《关于加强国家社科基金项目经费管理的通知》向在研项目负责人转发,并和在研项目负责人一起研究了相关精神同样第三条也不要!