我有一张表:CarRule
有下面这些列和数据
ID Keywords
1 时速50%、 不到100%
2 违反禁令标志
3 违反规定停放、拒绝立即驶离、妨碍其他车辆我要查询这个CarRule表,根据关键字获取ID
例如:机动车行驶超过规定时速50%以上不到100%的 就能获取到 ID=1
机动车违反禁令标志的 就能获取到 ID=2
违反规定停放、临时停车且驾驶人不在现场或驾驶人虽在现场拒绝立即驶离,妨碍其他车辆、行人通行的
就能获取到 ID=3这个查询我怎么写。
有下面这些列和数据
ID Keywords
1 时速50%、 不到100%
2 违反禁令标志
3 违反规定停放、拒绝立即驶离、妨碍其他车辆我要查询这个CarRule表,根据关键字获取ID
例如:机动车行驶超过规定时速50%以上不到100%的 就能获取到 ID=1
机动车违反禁令标志的 就能获取到 ID=2
违反规定停放、临时停车且驾驶人不在现场或驾驶人虽在现场拒绝立即驶离,妨碍其他车辆、行人通行的
就能获取到 ID=3这个查询我怎么写。
解决方案 »
- 一个表有主id和父级id,如何查询某已知id下的所有相关的子id
- 查询库存的sql语句怎么写?(初学)
- 为什么调用就发生 只有函数和扩展存储过程才能从函数内部执行的错误
- 怎么获取到数据库sql2000 事务日志中执行过sql语句( 查询 修改 删除 存储过程等)
- 字段排序
- 怎么删除数据库重复的数据
- 请问连接远程sql服务器,返回错误信息:Connection reset,怎么回事?
- 存储过程报错:异常查询要求为连接设置 ANSI_NULLS和ANSI_WARNINGS选项
- 镜像数据库自动故障转移问题
- SQL查询,按照行值判断显示结果
- 我分离的数据库怎么加不上啊
- 为什么在运行SQL远程视图的软件中经常出现“连接错误:[Microsoft][ODBC SQL Server Driver]通讯连接失败”出错?
where keyworks=...如果...非精确,则需要对...截取特征字符串,也就无须sql了
select id from carrule where keyworks like '%违反禁令标志%'
select id from carrule where keyworks like '%违反规定停放%' or keyworks like '%临时停车且驾驶人不在现场%' or keyworks like '%驾驶人虽在现场拒绝立即驶离%' or keyworks like '%妨碍其他车辆、行人通行%'
违反规定停放、临时停车且驾驶人不在现场或驾驶人虽在现场拒绝立即驶离,妨碍其他车辆、行人通行的
通过上面这句话 获取carrule 表相应的id
违反规定停放、临时停车且驾驶人不在现场或驾驶人虽在现场拒绝立即驶离,妨碍其他车辆、行人通行的
通过上面这句话 获取carrule 表相应的id
这个有难度,不会等待高手啊!
1 时速50%
1 不到100%
2 违反禁令标志
3 违反规定停放
3 拒绝立即驶离
3 妨碍其他车辆
2)游标CarRule
如果字段在你要查询的句子里面(charindex函数) 就intset到#t里面
3)select distinct id from #t
--1.先建立一个函数,通过分隔符来拆分keywords成多个关键字
create function dbo.fn_splitSTR
(
@s varchar(8000), --要分拆的字符串
@split varchar(10) --分隔字符
)
returns @re table( --要返回的临时表
col varchar(1000) --临时表中的列
)
as
begin
declare @len int
set @len = LEN(@split) --分隔符不一定就是一个字符,可能是2个字符
while CHARINDEX(@split,@s) >0
begin
insert into @re
values(left(@s,charindex(@split,@s) - 1))
set @s = STUFF(@s,1,charindex(@split,@s) - 1 + @len ,'') --覆盖:字符串以及分隔符
end
insert into @re values(@s)
return --返回临时表
end
go --2.建表
DECLARE @CarRule TABLE(id INT,Keywords VARCHAR(100))
INSERT INTO @carrule
VALUES(1,'时速50%、不到100%'),
(2,'违反禁令标志'),
(3,'违反规定停放、拒绝立即驶离、妨碍其他车辆')
;WITH split --拆分关键字
as
(
SELECT c.id,
c.keywords,
f.col
FROM @carrule c
CROSS apply dbo.fn_splitSTR(c.keywords,'、') f
)
--3.
SELECT s.id,
s.keywordsFROM split s
INNER JOIN
(
SELECT s.id,
s.keywords,
count(col) AS split_str_count --拆分成了几个关键字
FROM split s
GROUP BY s.id,
s.keywords
) ss
ON s.id = ss.idWHERE charindex(s.col,'机动车行驶超过规定时速50%以上不到100%的') > 0GROUP BY s.id,
s.keywords
HAVING count(*) = max(ss.split_str_count) --比如第一条记录拆分成了2个关键词,那么在匹配时要2个都匹配上了,才算为匹配
INSERT INTO @carrule
VALUES(1,'时速50%、不到100%'),
(2,'违反禁令标志'),
(3,'违反规定停放、拒绝立即驶离、妨碍其他车辆')
;WITH split --拆分关键字
as
(
SELECT c.id,
c.keywords,
f.col
FROM @carrule c
CROSS apply dbo.fn_splitSTR(c.keywords,'、') f
)
--3.
SELECT s.id,
s.keywordsFROM split s
INNER JOIN
(
SELECT s.id,
s.keywords,
count(col) AS split_str_count --拆分成了几个关键字
FROM split s
GROUP BY s.id,
s.keywords
) ss
ON s.id = ss.idWHERE charindex(s.col,'机动车违反禁令标志的') > 0GROUP BY s.id,
s.keywords
HAVING count(*) = max(ss.split_str_count) --比如第一条记录拆分成了2个关键词,那么在匹配时要2个都匹配上了,才算为匹配
INSERT INTO @carrule
VALUES(1,'时速50%、不到100%'),
(2,'违反禁令标志'),
(3,'违反规定停放、拒绝立即驶离、妨碍其他车辆')
;WITH split --拆分关键字
as
(
SELECT c.id,
c.keywords,
f.col
FROM @carrule c
CROSS apply dbo.fn_splitSTR(c.keywords,'、') f
)
--3.
SELECT s.id,
s.keywordsFROM split s
INNER JOIN
(
SELECT s.id,
s.keywords,
count(col) AS split_str_count --拆分成了几个关键字
FROM split s
GROUP BY s.id,
s.keywords
) ss
ON s.id = ss.idWHERE charindex(s.col,'违反规定停放、临时停车且驾驶人不在现场或驾驶人虽在现场拒绝立即驶离,妨碍其他车辆、行人通行的就能获取到') > 0GROUP BY s.id,
s.keywords
HAVING count(*) = max(ss.split_str_count) --比如第一条记录拆分成了2个关键词,那么在匹配时要2个都匹配上了,才算为匹配
违反规定停放、临时停车且驾驶人不在现场或驾驶人虽在现场拒绝立即驶离,妨碍其他车辆、行人通行的
通过上面这句话 获取carrule 表相应的idCarRule表建立得不合理了,建立增加一个类别来作区分
例如:3,'违反规定停放、拒绝立即驶离、妨碍其他车辆' 需要“违反规定停放、临时停车且驾驶人不在现场或驾驶人虽在现场拒绝立即驶离,妨碍其他车辆、行人通行的就能获取到” 对这个分词都必须存在才可以。
select id from carrule where keyworks like '%违反规定停放%' and keyworks like '%临时停车且驾驶人不在现场%' and keyworks like '%驾驶人虽在现场拒绝立即驶离%' and keyworks like '%妨碍其他车辆、行人通行%'
select id from carrule where keyworks like '%违反规定停放%' and (keyworks like '%临时停车且驾驶人不在现场%' or keyworks like '%驾驶人虽在现场拒绝立即驶离%') and keyworks like '%妨碍其他车辆、行人通行%'
奇怪的是由ID找关键字,但问题是用关键字找ID,不现实。
奇怪的是由ID找关键字,但问题是用关键字找ID,不现实。上面的代码其实就是,通过charindex函数,来通过关键字过滤,由相应的关键字再来找到相应的id的。