实现按关健字模糊查询,并按匹配度排序的SQL语句

复制代码 代码如下:

IF OBJECT_ID('TB')IS NOT NULL DROP TABLE TB

GO

CREATE TABLE tb (ID INT IDENTITY(1,1),VALUE NVARCHAR(100))

INSERT tb SELECT N'中国'

UNION ALL SELECT N'中国人'

UNION ALL SELECT N'中国人民'

UNION ALL SELECT N'日本'

UNION ALL SELECT N'日本人'

UNION ALL SELECT N'我的心中有人姑娘'

UNION ALL SELECT N'人民网'

UNION ALL SELECT N'中国是个伟大的国家'

UNION ALL SELECT N'我们都是中国人,都是炎黄子孙,都是龙人传人'

IF OBJECT_ID('fn_SplitStringToROWS')IS NOT NULL DROP FUNCTION fn_SplitStringToROWS

GO

CREATE FUNCTION fn_SplitStringToROWS

(

@str NVARCHAR(100)

)

RETURNS @t TABLE(v NVARCHAR(2))

AS

BEGIN

DECLARE @i INT

SET @i=1

WHILE @i<=LEN(@str)

BEGIN

INSERT @t SELECT SUBSTRING(@str,@i,1)

SET @i=@i+1

END

RETURN

END

GO

SELECT * FROM DBO.fn_SplitStringToROWS(N'中国人')

DECLARE @searchSTR NVARCHAR(20)

SET @searchSTR=N'中国人'

SELECT ID,[VALUE] FROM tb a

INNER JOIN fn_SplitStringToROWS(@searchSTR) b

ON CHARINDEX(b.v,a.VALUE)>0

WHERE VALUE LIKE N'%[中国人]%'

GROUP BY ID,VALUE

ORDER BY COUNT(DISTINCT v) DESC

DROP TABLE tb

/*

v

----





(3 個資料列受到影響)

ID VALUE

----------- ----------------------------------------------------------------------------------------------------

2 中国人

3 中国人民

9 我们都是中国人,都是炎黄子孙,都是龙人传人

6 我的心中有人姑娘

1 中国

8 中国是个伟大的国家

5 日本人

7 人民网

(8 個資料列受到影響)

*/

时间: 2024-09-24 07:04:28

实现按关健字模糊查询,并按匹配度排序的SQL语句的相关文章

实现按关健字模糊查询,并按匹配度排序的SQL语句_MsSql

复制代码 代码如下: IF OBJECT_ID('TB')IS NOT NULL DROP TABLE TB GO CREATE TABLE tb (ID INT IDENTITY(1,1),VALUE NVARCHAR(100)) INSERT tb SELECT N'中国' UNION ALL SELECT N'中国人' UNION ALL SELECT N'中国人民' UNION ALL SELECT N'日本' UNION ALL SELECT N'日本人' UNION ALL SELE

thinkphp中多表查询中防止数据重复的sql语句(必看)_php技巧

下面先来看看例子: table id name 1 a 2 b 3 c 4 c 5 b 库结构大概这样,这只是一个简单的例子,实际情况会复杂得多. select *, count(distinct name) from table group by name 结果: id name count(distinct name) 1 a 1 2 b 1 3 c 1 最后一 项是多余的,不用管就行了 tp2.0手册   搜索连贯操作 可看到相关的资料 SELECT cat_id, COUNT(*) AS

将界面查询条件通过java解析成sql语句

问题描述 将界面查询条件通过java解析成sql语句 新手求助,现在做一个东西,需要将界面查询的条件进行解析成sql条件,比如传进来的 条件为(!ewew&!1)&!ce|( wewe|测试) 和查询字段为content,那么得到的解析语句为 (( content not like '%ewew%' and content not like '%1%') and ( content not like '%ce%') or ( content like '% wewe%' or conten

查询及删除重复记录的SQL语句

查询及删除重复记录的sql语句 (一) 比方说 在a表中存在一个字段"name", 而且不同记录之间的"name"值有可能会相同, 现在就是需要查询出在该表中的各记录之间,"name"值存在重复的项: select name,count(*) from a group by name having count(*) > 1 如果还查性别也相同大则如下: select name,sex,count(*) from a group by nam

列表查询组件代码, 简化拼接条件SQL语句的麻烦

控件代码及测试例子:http://files.cnblogs.com/wuhuacong/CommonSearch.rar  使用场景: 在列表页面中,一般有好几个条件, 用户进行查询时候,需要根据这几个条件进行过滤查询.但在组装这些过滤条件的时候,代码比较烦琐臃肿,本组件代码为解决该问题而设计. 使用目的:  1.减少对参数非空的条件判断 2. 可以构造出参数化的DbCommand对象,简化操作. 3.适当修改后可以用于其他数据访问的参数化参数生成.4.构造Sql语句或者参数化条件更加易读 1

queryforlist模糊查询-JdbcTemplet中的queryForList(String sql,Object[],int[])如何进行模糊查询

问题描述 JdbcTemplet中的queryForList(String sql,Object[],int[])如何进行模糊查询 这是代码: Object[] params = new Object[]{searchValue}; int[] types = new int[]{Types.VARCHAR}; String sql = "SELECT * FROM T_BILL_INFORMATION tbi WHERE tbi.name like '%'+?+'%'"; getJd

优化SQL查询:如何写出高性能SQL语句

1. 首先要搞明白什么叫执行计划? 执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的,比如一条SQL语句如果用来从一个 10万条记录的表中查1条记录,那查询优化器会选择"索引查找"方式,如果该表进行了归档,当前只剩下5000条记录了,那查询优化器就会改变方案,采用 "全表扫描"方式. 可见,执行计划并不是固定的,它是"个性化的".产生一个正确的"执行计划"有两点很重要:

从500万条数据中查询,求优化一条SQL语句

问题描述 表结构如下,里面有500W数据.我没有权限修改这个表,所以请大家给我优化下SQL查询CREATE TABLE IF NOT EXISTS `jdp_tb_trade` ( `tid` bigint(20) NOT NULL, `status` varchar(64) DEFAULT NULL, `type` varchar(64) DEFAULT NULL, `seller_nick` varchar(32) DEFAULT NULL, `buyer_nick` varchar(32)

mysql查询在某个时间内的数据sql语句

比如我这边查询jz_user表用户创建时间大于四月一号到四月三十号为例  代码如下 复制代码 select FROM_UNIXTIME(create_time),user_id from jz_user Where DATE_FORMAT(FROM_UNIXTIME(create_time),'%Y-%m-%d') <= DATE_FORMAT("2013-4-30",'%Y-%m-%d') AND DATE_FORMAT(FROM_UNIXTIME(create_time),'