SQL语句,中文匹配问题

时间:2022-02-03 06:32:22
SQL数据库Article有个字段Exptxt,该字段是txt类型,存储的是一个文章的段落。
现在问题是
我要匹配“因为...所以...”,这个匹配应该是在一个句子里面的,不能跨句子检索
我的思路是,
select * from Article where Exptxt like '%因为(这中间可以是若干个字符,但不可以包含这些'。,!,?')所以%'
应该是要使用正则表达式的。。
哪个高手帮忙写下这个检索语句

13 个解决方案

#1


select * from Article where Exptxt like '%因为%' and like'%所以%'

#2


如果查询出来,在后台在对返回集合做二次处理应该比较容易一点.

#3


引用 1 楼  的回复:
C# code

select * from Article where Exptxt like '%因为%' and like'%所以%'

这样只能找到这个段落,含有‘因为’和‘所以’的关键词语的记录。不符合我说的要求

#4


select * from Article where Exptxt like '%因为%,%.%!%所以%'

#5




DECLARE @s nvarchar(max)
SET @s='XXXXXXXXXXXXX。因为香蕉,所以哈密瓜,,,,,。
因为菠萝,所以橘子,,。'


--以句号(。)作为每个因为,所以的分隔符
DECLARE @splitor varchar(2)
SET @splitor='。'

DECLARE @tb TABLE
(
sentence nvarchar(max)
)

WHILE(1=1)
  BEGIN

IF CHARINDEX(@splitor, @s) = 0
BREAK;
INSERT INTO @tb  --截取每个句号作为一个sentence,对每个sentence循环处理
  SELECT 
CASE WHEN SUBSTRING(@s,1, CHARINDEX(@splitor, @s)-1) LIKE '%因为%所以%'
 THEN SUBSTRING(@s,1, CHARINDEX(@splitor, @s)-1)
ELSE NULL 
END sentence
--将每个sentence替换为空字符串
SET @s = REPLACE(@s, SUBSTRING(@s,1, CHARINDEX(@splitor, @s)), '')
  END

SELECT * FROM @tb
---所有 因为所以 分句都包含在@tb表变量中

#6


SQL中使用nvarchar(max)类型用来代替  你字段中的text类型,不知道换成text数据类型进行查询的话会不会出现什么情况,尝试下……

#7


SQL Server 也是可以使用正则的,
参考 http://blog.csdn.net/maco_wang/article/details/7439560

或者从数据库读出来再匹配
http://www.cnblogs.com/chenxizhang/archive/2011/05/27/2060319.html

#8


引用 7 楼  的回复:
SQL Server 也是可以使用正则的,
参考http://blog.csdn.net/maco_wang/article/details/7439560

或者从数据库读出来再匹配
http://www.cnblogs.com/chenxizhang/archive/2011/05/27/2060319.html

我要的是中文。。‘因为...所以...’,‘因为’和‘所以’中间可以包含除了(。,!,?)的任意字符。。能不能给个例子!!!

#9


引用 4 楼  的回复:
select * from Article where Exptxt like '%因为%,%.%!%所以%'


这是能查找,‘因为’和‘所以’中间可以包含除了(。,!,?)的任意字符的例子嘛?先谢了。。我测试一下

#10


引用 5 楼  的回复:
SQL code



DECLARE @s nvarchar(max)
SET @s='XXXXXXXXXXXXX。因为香蕉,所以哈密瓜,,,,,。
        因为菠萝,所以橘子,,。'


--以句号(。)作为每个因为,所以的分隔符
DECLARE @splitor varchar(2)
SET @splitor='。'

DECLARE @tb TABLE
……


非常感谢写了这么详细。。不过有点死。。不一定是句号分割,也可能是!,?,省略号等。。

#11


select * from Article where Exptxt like '%因为%所以%' and Exptxt not like '%[!?]%'

#12


该回复于2012-10-06 16:30:26被版主删除

#13


没有符合我要求的答案。。自己研究去把

#1


select * from Article where Exptxt like '%因为%' and like'%所以%'

#2


如果查询出来,在后台在对返回集合做二次处理应该比较容易一点.

#3


引用 1 楼  的回复:
C# code

select * from Article where Exptxt like '%因为%' and like'%所以%'

这样只能找到这个段落,含有‘因为’和‘所以’的关键词语的记录。不符合我说的要求

#4


select * from Article where Exptxt like '%因为%,%.%!%所以%'

#5




DECLARE @s nvarchar(max)
SET @s='XXXXXXXXXXXXX。因为香蕉,所以哈密瓜,,,,,。
因为菠萝,所以橘子,,。'


--以句号(。)作为每个因为,所以的分隔符
DECLARE @splitor varchar(2)
SET @splitor='。'

DECLARE @tb TABLE
(
sentence nvarchar(max)
)

WHILE(1=1)
  BEGIN

IF CHARINDEX(@splitor, @s) = 0
BREAK;
INSERT INTO @tb  --截取每个句号作为一个sentence,对每个sentence循环处理
  SELECT 
CASE WHEN SUBSTRING(@s,1, CHARINDEX(@splitor, @s)-1) LIKE '%因为%所以%'
 THEN SUBSTRING(@s,1, CHARINDEX(@splitor, @s)-1)
ELSE NULL 
END sentence
--将每个sentence替换为空字符串
SET @s = REPLACE(@s, SUBSTRING(@s,1, CHARINDEX(@splitor, @s)), '')
  END

SELECT * FROM @tb
---所有 因为所以 分句都包含在@tb表变量中

#6


SQL中使用nvarchar(max)类型用来代替  你字段中的text类型,不知道换成text数据类型进行查询的话会不会出现什么情况,尝试下……

#7


SQL Server 也是可以使用正则的,
参考 http://blog.csdn.net/maco_wang/article/details/7439560

或者从数据库读出来再匹配
http://www.cnblogs.com/chenxizhang/archive/2011/05/27/2060319.html

#8


引用 7 楼  的回复:
SQL Server 也是可以使用正则的,
参考http://blog.csdn.net/maco_wang/article/details/7439560

或者从数据库读出来再匹配
http://www.cnblogs.com/chenxizhang/archive/2011/05/27/2060319.html

我要的是中文。。‘因为...所以...’,‘因为’和‘所以’中间可以包含除了(。,!,?)的任意字符。。能不能给个例子!!!

#9


引用 4 楼  的回复:
select * from Article where Exptxt like '%因为%,%.%!%所以%'


这是能查找,‘因为’和‘所以’中间可以包含除了(。,!,?)的任意字符的例子嘛?先谢了。。我测试一下

#10


引用 5 楼  的回复:
SQL code



DECLARE @s nvarchar(max)
SET @s='XXXXXXXXXXXXX。因为香蕉,所以哈密瓜,,,,,。
        因为菠萝,所以橘子,,。'


--以句号(。)作为每个因为,所以的分隔符
DECLARE @splitor varchar(2)
SET @splitor='。'

DECLARE @tb TABLE
……


非常感谢写了这么详细。。不过有点死。。不一定是句号分割,也可能是!,?,省略号等。。

#11


select * from Article where Exptxt like '%因为%所以%' and Exptxt not like '%[!?]%'

#12


该回复于2012-10-06 16:30:26被版主删除

#13


没有符合我要求的答案。。自己研究去把