【问题标题】:search database id field with string manipulated id使用字符串操作的 id 搜索数据库 id 字段
【发布时间】:2014-01-25 00:59:11
【问题描述】:

我们将以这种形式从用户那里获取 id:

"A-123456-14"

并希望以这种形式在具有简单 id 的数据库中搜索:

123456

我试过了

 select * from orders where id = '%' + searchId + '%';

这里 id = 123456 in database and searchId = 'A-123456-14' 来自用户。

但它不能正常工作

(A : 是前缀,- 是分隔符,14 是后缀)

请帮我解决这个问题。

【问题讨论】:

    标签: mysql sql search select sql-like


    【解决方案1】:

    你可以使用:

     SELECT * FROM orders WHERE WHERE 'A-123456-14' REGEXP '[:punct:]' + id + '[:punct:]';
    

    在上面,您可以用用户输入 searchId 替换“A-123456-14”

    我已经很好地尝试了它的工作

    【讨论】:

      【解决方案2】:
      SELECT 
          *
      FROM
          orders
      WHERE
          id = SUBSTRING_INDEX(
              SUBSTRING_INDEX(searchId, '-', 2),
                  '-',- 1)
      

      编辑:

      如果你想让一切都动态化,那么你可以试试这个(如果它是动态的,你也应该将分隔符作为参数发布)。

      SELECT 
          *
      FROM
          orders
      WHERE
          id = SUBSTRING_INDEX(
              SUBSTRING_INDEX(searchId, delimiter, 2),
                  delimiter, - 1)
      

      【讨论】:

      • (A : 是前缀,- 是分隔符,14 是后缀)每件事都是动态的(即前缀、分隔符和后缀)根据顺序变化
      • @Melon : '-' 不是静态的,它是动态的,取决于许多订单标准(如动态分隔符)
      • -.- 动态分隔符,第一次看到
      • 我刚刚编辑了我的答案,如果它也是动态的,请将其作为参数发送。
      【解决方案3】:

      试试这个:

      SELECT * FROM orders WHERE searchId LIKE CONCAT('%-', Id, '-%')
      

      【讨论】:

      • searchId 正在从用户获取,并在 db 中获取其 ID。正如你所说,我试过但没有工作
      • (A : 是前缀,- 是分隔符,14 是后缀)每件事都是动态的(即前缀、分隔符和后缀)根据顺序变化
      • @murtaza.webdev 它根据 Id 检查。它忽略了前缀和后缀是什么。
      • @murtaza.webdev 在某些时候你需要一些模式。如果您不使用任何模式并从 LIKE 字符串中删除 -,如果您想查找 123 Id 的记录,它还将获取 123、1234、12345、123456
      • 尝试 SELECT * FROM orders WHERE searchId LIKE CONCAT('%', id, '%');但你会面临问题@SaharshShah 评论
      【解决方案4】:

      我肯定会使用您选择的编程语言(例如 Java 或 PHP 或您使用的任何语言)而不是 SQL 来删除您不需要的字符串位。然后只需使用select * from orders where id = ? 并将参数设置为您的编程语言中的"%"+id+"%"

      • 编程语言用于编程、逻辑、解析等,SQL 用于定义您希望从数据中获得什么
      • 不要忘记使用? 之类的参数,否则你可以打开自己的SQL injection

      【讨论】:

        猜你喜欢
        • 2014-03-20
        • 1970-01-01
        • 1970-01-01
        • 2015-02-28
        • 1970-01-01
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多