【问题标题】:Selecting query sql with % as value character选择以 % 作为值字符的查询 sql
【发布时间】:2016-01-26 18:24:25
【问题描述】:

您好,我在数据库中有这样的表:

╔══════════════════════════════════════════╗
║              v3_url_alias                ║
╠════╦═══════════════╦═════════════════════╣
║ id ║    query      ║       keyword       ║
╠════╬═══════════════╬═════════════════════╣
║  1 ║ product_id=20 ║   540-65R38-K_028   ║
║  2 ║ product_id=21 ║ 18.00R33-EM_DT-150% ║
╚════╩═══════════════╩═════════════════════╝

我正在使用此表使我的网址友好,但许多人都知道 % 符号不是有效的网址字符,因此使我的浏览器收到错误请求。 我在这个表中有很多条目(1700 左右),需要一个查询来获取所有在 column 关键字中带有 % 的条目。

所以我尝试在 MySQL 中执行此操作并提出以下查询:

SELECT * FROM v3_url_alias WHERE keyword LIKE '%%%';

这将返回我的所有关键字,因为 % 用作通配符。

我的问题是如何使用 SQL 检索每个包含 % 字符的关键字?

【问题讨论】:

    标签: php mysql sql url


    【解决方案1】:

    使用转义字符!

    MySQL 具有反斜杠 (\) 作为默认转义字符:

    SELECT * FROM v3_url_alias WHERE keyword LIKE '%\%%';
    

    ANSI SQL 的方式是使用ESCAPE 子句来指定转义字符,例如:

    SELECT * FROM v3_url_alias WHERE keyword LIKE '%#%%' escape '#';
    

    (这也适用于 MySQL,至少只要未指定 \。)

    【讨论】:

    • 这为我完成了工作:)!
    • 只是好奇。为什么你需要escape '\',因为SELECT * FROM v3_url_alias WHERE keyword LIKE '%\%%'; 有效。
    • 我不知道我已经把那部分遗漏了,我认为这是对描述的补充,因为我没有注意到它在查询中,所以我也想知道
    • @6339,是吗?!?那一定是一些 MySQL 的特别之处。我的答案是通用的 ANSI SQL。
    • @Baklap4 使用SELECT * FROM v3_url_alias WHERE keyword LIKE '%\%%' escape '\'; 是否有效?我的意思是 escape '\' 关键字。
    【解决方案2】:

    使用 MySQL:

    使用反斜杠转义字符 (\)。

    SELECT * FROM v3_url_alias WHERE keyword LIKE '%\%%';
    

    【讨论】:

      【解决方案3】:

      使用方括号。

      SELECT * 
      FROM v3_url_alias 
      WHERE keyword LIKE '%[%]%'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-23
        • 2020-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-03
        相关资源
        最近更新 更多