Sqlite 特殊字符搜索无法查询 % _等符号无法处理 返回

SqlSugar 沟通中
13 286
该叫什么 Nelly 发布于2周前
悬赏:0 飞吻

增加SqlSugarSetup.Db.Utilities.EscapeLikeValue(input.Keyword);特殊字符处理生成如下sql:

SELECT `p`.*, `b`.`BrandName` AS `BrandName`  FROM `edge_base_protocol` `p` Left JOIN `edge_base_brand` `b` ON ( `p`.`Base_BrandId` = `b`.`ID` )    WHERE ((`p`.`ProtocolCode` like '%'||@MethodConst0||'%') OR (`p`.`ProtocolName` like '%'||@MethodConst1||'%') )  ORDER BY `p`.`CreationTime` DESC LIMIT 0,10

{"@MethodConst0":"\\%","@MethodConst1":"\\%"}

结果还是无法查询%号的数据


网上搜索正常过滤特殊字符语句SELECT * FROM table WHERE number LIKE  '%/%%' escape '/' 

当前版本5.1.4.206

热忱回答13

  •  SqlSugarCore 5.1.4.208-preview04

    已修复。  过五分钟更新到预览版本04


    0 回复
  • 这样就行了SqlSugarSetup.Db.Utilities.EscapeLikeValue(“%”);

    0 回复
  • Nelly Nelly VIP0
    2周前

    @fate stay nightimage.png  收到,已解决

    0 回复
  • Nelly Nelly VIP0
    2周前

    @fate stay night

    SELECT `p`.*, `b`.`BrandName` AS `BrandName`  FROM `edge_base_protocol` `p` Left JOIN `edge_base_brand` `b` ON ( `p`.`Base_BrandId` = `b`.`ID` )    WHERE ((`p`.`ProtocolCode` like '%'||@MethodConst0||'%') OR (`p`.`ProtocolName` like '%'||@MethodConst1||'%') )  ORDER BY `p`.`CreationTime` DESC LIMIT 0,10

    {"@MethodConst0":"\\_","@MethodConst1":"\\_"}  

    _下划线特殊符号没有处理好  var Keyword = SqlSugarSetup.Db.Utilities.EscapeLikeValue(input.Keyword,'_');  增加下划线也无法查询

    0 回复
  • Nelly Nelly VIP0
    2周前

    @Nelly:_ 查询出来是所有记录无筛选


    建议检查下特殊符号处理

    public static String sqliteEscape(String keyWord){

        keyWord = keyWord.replace("/", "//");

        keyWord = keyWord.replace("'", "''");

        keyWord = keyWord.replace("[", "/[");

        keyWord = keyWord.replace("]", "/]");

        keyWord = keyWord.replace("%", "/%");

        keyWord = keyWord.replace("&","/&");

        keyWord = keyWord.replace("_", "/_");

        keyWord = keyWord.replace("(", "/(");

        keyWord = keyWord.replace(")", "/)");

        return keyWord;

    }

    0 回复
  • keyWord传的是的什么值

    0 回复
  • Nelly Nelly VIP0
    2周前

    @fate sta:_ 下划线 你们没有处理  我自行增加第二个参数,你们SQL语句没有增加esape这个关键字

    SELECT `p`.*, `b`.`BrandName` AS `BrandName`  FROM `edge_base_protocol` `p` Left JOIN `edge_base_brand` `b` ON ( `p`.`Base_BrandId` = `b`.`ID` )    WHERE ((`p`.`ProtocolCode` like '%'||@MethodConst0||'%') OR (`p`.`ProtocolName` like '%'||@MethodConst1||'%') )  ORDER BY `p`.`CreationTime` DESC LIMIT 0,10

    {"@MethodConst0":"\\_","@MethodConst1":"\\_"}  

    _下划线特殊符号没有处理好  var Keyword = SqlSugarSetup.Db.Utilities.EscapeLikeValue(input.Keyword,'_');  增加下划线也无法查询

    版本号已经更新至预览版04

    0 回复
  • sqlite下划线不需要转换。

    0 回复
  • 直接_就行了不需要转

    0 回复
  • Nelly Nelly VIP0
    2周前

    @fate staimage.png

    0 回复
  • Nelly Nelly VIP0
    2周前

    image.png

    0 回复
  • SqlSugarCore 5.1.4.208-preview05


    0 回复
  • Nelly Nelly VIP0
    2周前

    @fate sta

    更新至05版本已解决。谢谢


      var Keyword = SqlSugarSetup.Db.Utilities.EscapeLikeValue(input.Keyword);  没有自动增加\

    SELECT COUNT(1) FROM (SELECT `p`.*, `b`.`BrandName` AS `BrandName`  FROM `edge_base_protocol` `p` Left JOIN `edge_base_brand` `b` ON ( `p`.`Base_BrandId` = `b`.`ID` )   WHERE ((`p`.`ProtocolCode` like '%'||@MethodConst0||'%') OR (`p`.`ProtocolName` like '%'||@MethodConst1||'%') ) ) CountTable

    {"@MethodConst0":"_","@MethodConst1":"_"}


    var Keyword = SqlSugarSetup.Db.Utilities.EscapeLikeValue(input.Keyword,'_'); 增加\但是查询语句没有增加esape

    SELECT `p`.*, `b`.`BrandName` AS `BrandName`  FROM `edge_base_protocol` `p` Left JOIN `edge_base_brand` `b` ON ( `p`.`Base_BrandId` = `b`.`ID` )    WHERE ((`p`.`ProtocolCode` like '%'||@MethodConst0||'%') OR (`p`.`ProtocolName` like '%'||@MethodConst1||'%') )  ORDER BY `p`.`CreationTime` DESC LIMIT 0,10

    {"@MethodConst0":"\\_","@MethodConst1":"\\_"}


    0 回复