C_and_CPP 板


LINE

※ 引述《liu2007 (薯)》之铭言: : 我的开发平台是 win7 : 工具是QT Creator : 版本是Qt Core 5.15.2 : 在写一些存取Sqlite资料库的程式碰到了两个问题。 : 1.当要查询的字当中包含sql语法保留字的时候: : QString keyword; : QString queryString{"SELECT * FROM exfts WHERE nameEN match ?"}; : query.prepare(queryString); : query.addBindValue(keyword); : 当keyword是sql语法的保留字,例如:AND, OR等等,querry会失败 : 想请问QT有相对应函式可以解决吗? : 还是只能自己判断如果要搜的关键字是保留字的时候 : querryString要自己变成 : QString queryString{"SELECT * FROM exfts WHERE nameEN match " + : "'"+ keyword +"';"}; 还是可以继续用 addBindValue(),只要帮该关键字加上引号即可。 例如:addBindValue("'OR'") 或 addBindValue("\"OR\"") : 2.第二个问题就是在使用全文检索FTS的时候 : match + 万用字元* 跟 : 一般普通的sql语法 like + 万用字元% : 两者似乎有什麽不一样 : 如果我想要找有包含「水果」两个字的栏位 : 使用 like '%水果%'搜寻 : 那不管是 : 1.好吃的水果 : 2.好吃 水果真的很好吃 : 3.好吃 水果 真的很好吃 : 3.好吃-水果-真的很好吃 : 都可以捞出来 : 但如果是match '水果' : 只有3会被捞出来 : 如果使用match '*水果*' : 有时候可以被捞出来 : 也有可能不会被捞出来 : 因为这是之前碰到的问题现在才来问 : 所以当时的资料库资料以及下的关键字我一时举例不上来 : 我下班之後如果有找到例子会再补上 : 目前只确定使用match '关键字'的时候 : 两旁有用空白切开来的栏位才会被捞出来,例如上述的3 : 其他包含在一句没断开的句子里则不会捞出来 : 用万用字元摆前或摆後也没有正确捞出 : 想请问是我完全搞错FTS的万用字元*的用法 : 还是是因为非英语的文字分割字词的关系? : 又或是其他原因呢? : 感谢阅读 先简单回答, MATCH 做的是 token query,而 LIKE 做的则是 pattern matching。 详细一点解释的话, MATCH 比较的是字串中的 token, 而只有前後是空白或特殊字元的部分才会被归类成 token。 例如在以下三个例子中,term 都会是 token: "a short term", "long-term", "a_legal_term" 但如果是 "terminology" 的话,term 就不是一个 token 了, 因此用 MATCH 'term' 是找不到它的。 另外,使用万用字元 * 的 MATCH,称为 token prefix query, 它一样只会拿来和 token 做比较,且只会比较该 token 的前缀部分(prefix)。 例如使用 MATCH 'ter*' 的话,上面四个例子都会被找到, 但如果使用 MATCH '*erm' 则不会有任何匹配。 至於 LIKE 比较的则是整个字串,而非其中的 token, 也就是说,整个字串都必须符合 LIKE 後面写的 pattern,才算满足条件。 两者的差异大概是这样子,有错误的地方再烦请指正。 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 180.218.168.129 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1637325854.A.A4A.html
1F:推 liu2007: 我在上班有偷偷查资料,关於万用字元*的部分也是查到说 11/19 21:58
2F:→ liu2007: 只能match开头的资料,从另外一个角度来说,像fts这种建 11/19 21:59
3F:→ liu2007: 索引的方式的资料库,要它去找match结尾等於是要把整个 11/19 21:59
4F:→ liu2007: 资料翻一遍,就违背建索引的目的了XD 11/19 22:00
5F:→ liu2007: 至於第一个问题我query用问号然後再去addbindvalue的原因 11/19 22:00
6F:→ liu2007: 就是我的资料除了有可能AND等保留字以外,还会有'和"这种 11/19 22:01
7F:→ liu2007: 这种符号,如果bind上去之前都要检查是否包含'或"免得 11/19 22:02
8F:→ liu2007: query下错,看起来有点多此一举又莫可奈何,所以才会想用 11/19 22:02
9F:→ liu2007: 问号的方式,但没想到现在?没办法解决保留字的问题... 11/19 22:03
10F:→ liu2007: 感谢回答 11/19 22:03







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP