开发者社区 > PolarDB开源 > PolarDB 分布式版 > 正文

polardb这个问题怎么解决?

polardb这个问题怎么解决?SELECT *
FROM uc_role t1
WHERE
1=1
AND CASE
WHEN '测试' != '' THEN t1.name LIKE '%测试%'
ELSE 1=1
END
AND CASE
WHEN 'I=' != '' THEN t1.name LIKE '%测试%'
ELSE 1=1
END
AND t1.extend_0ne = 'd84311d5280c466f8c7bc58caa02b288'
AND t1.status = 1
ORDER BY gmt_create DESC;
lQLPJwQ1mX4mXtfNA1XNBgmwzdctKbs_Mv8Fh97L_tD-AA_1545_853.png
lQLPKdnQzAp3JtfNARLNBbWwmZ7vq-FKDGEFh97aiC-eAA_1461_274.png

展开
收起
三分钟热度的鱼 2024-01-10 14:05:06 43 0
2 条回答
写回答
取消 提交回答
  • 这个问题看起来像是在使用 MySQL 的 LIKE 语句时,没有正确地使用通配符。在 SQL 中,% 是一个通配符,表示任意数量的字符。所以,如果你想匹配任何包含 "测试" 或 "I=" 的字符串,你应该使用 % 作为通配符。

    你的查询应该修改为:

    SELECT *
    FROM uc_role t1
    WHERE
    1=1
    AND CASE
    WHEN '测试' != '' THEN t1.name LIKE '%测试%'
    ELSE 1=1
    END
    AND CASE
    WHEN 'I=' != '' THEN t1.name LIKE '%I=%'
    ELSE 1=1
    END
    AND t1.extend_0ne = 'd84311d5280c466f8c7bc58caa02b288'
    AND t1.status = 1
    ORDER BY gmt_create DESC;
    

    注意,我将第二个 LIKE 语句中的 '%测试%' 改为了 '%I=%'

    2024-01-13 09:28:38
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    这个问题是由于在SQL查询中使用了错误的条件判断导致的。在这个查询中,当'测试'不等于空字符串时,应该使用LIKE '%测试%'进行模糊匹配,而不是LIKE '%测试%'。同样,当'I='不等于空字符串时,也应该使用LIKE '%I=%'进行模糊匹配。以下是修改后的查询:

    SELECT *
    FROM uc_role t1
    WHERE
    1=1
    AND CASE
    WHEN '测试' != '' THEN t1.name LIKE '%测试%'
    ELSE 1=1
    END
    AND CASE
    WHEN 'I=' != '' THEN t1.name LIKE '%I=%'
    ELSE 1=1
    END
    AND t1.extend_0ne = 'd84311d5280c466f8c7bc58caa02b288'
    AND t1.status = 1
    ORDER BY gmt_create DESC;
    
    2024-01-11 14:24:54
    赞同 展开评论 打赏

PolarDB 分布式版 (PolarDB for Xscale,简称“PolarDB-X”) 是阿里云自主设计研发的高性能云原生分布式数据库产品,为用户提供高吞吐、大存储、低延时、易扩展和超高可用的云时代数据库服务。

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载