1.有关键字查询,与非关键字查询即不输入任务条件查询
2.限制关键字的个数与输入长度,以方便程序设计与维护,以及对性能的提高
3.存储过程中关键字条件默认为NULL,通过判断是否为NULL来获取是否有信息
4.通过自定义函数来获取关键字出现的次数,使用REPLACE方法代替LIKE的方式查询,以大幅度提高性能
6.通过取得关键字出现的次数,来显示有循序的结果集
--简单实例代码,我用的是Sqlserver
,假设只允许输入2个关键字查询
CREATE
PROC
Find
(
@AllWords
bit,
--是否关键字查询
@Word1
VARCHAR(15)
=
NULL,
@Word2
VARCHAR(15)
=
NULL
)
AS
IF
@AllWords
=
0
BEGIN
查询全部
END
IF
@AllWords
=
1
BEGIN
--WordCount接收2个参数(关键字
,需查询字段),返回个整形,
SELECT
*,dbo.WordCount(@Word1,
FindField)+
dbo.WordCount(@Word2,FindField)
AS
Rank
FROM
内容表
ORDER
BY
Rank
DESC
--如果未需要具有关键字的数据就Rank>0就行了
END
--自定义函数
CREATE
FUNCTION
dbo.WordCount
(@Word
VARCHAR(15),
@FindField
VARCHAR(1000))
RETURNS
SMALLINT
AS
BEGIN
--未有关键字或未有查询字段返回0
IF
@Word
IS
NULL
OR
@FindField
IS
NULL
RETURN
0
--使@BiggerWord长度大于关键字用于下面的减法
DECLARE
@BiggerWord
VARCHAR(21)
SELECT
@BiggerWord
=
@Word
+
'x'
--取得替换后的长度
DECLARE
@BigCounts
VARCHAR(2000)
SELECT
@BigCounts
=
REPLACE
(@FindField,
@Word,
@BiggerWord)
--用替换后的长度
减掉
当前查询字段的长度
=
出现的次数
也就是上面加的'X'
RETURN
LEN(@BigCounts)
-
LEN(@FindField)
END
--自己写的,希望对你有帮助
--注:对于上面这样的模式查询,更有利于扩展,同时可以查询主内容与副内容甚至更多,达到更精确的关键字查询
首先处理这类问题的思路是找对应的Api,这是字符串处理,在java.lang包下,String类splitpublic String[] split(String regex)根据给定的正则表达式的匹配来拆分此字符串。
该方法的作用就像是使用给定的表达式和限制参数 0 来调用两参数 split 方法。因此,结果数组中不包括结尾空字符串。
例如,字符串 "boo:and:foo" 产生带有下面这些表达式的结果:
Regex结果:{ "boo", "and", "foo" }o{ "b", "", ":and:f" }参数:regex - 定界正则表达式
返回:字符串数组,根据给定正则表达式的匹配来拆分此字符串,从而生成此数组。
抛出:PatternSyntaxException - 如果正则表达式的语法无效
此方法的形参是String 返回值是一个截取的String[]数组
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)