使用字符串操作的ID搜索数据库中包含ID字段的记录

4

我们将从用户在这个表单中获取ID:

"A-123456-14"

我想用简单的id在数据库中搜索:

123456

我已经尝试过

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

数据库中的ID为123456,用户提供的搜索ID为'A-123456-14'。

但是由于格式不正确,因此无法正常工作。

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

请帮助我解决这个问题。

4个回答

2

您可以使用以下内容:

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

在上面的代码中,你可以用用户输入的searchId替换'A-123456-14'。

我已经尝试过,它能够正常工作。


1
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)

每个东西都是动态的(即前缀、分隔符和后缀)根据顺序变化。 - murtaza.webdev
@Melon:'-'不是静态的,它是动态的,取决于许多订单标准(如动态分隔符)。 - murtaza.webdev
1
动态分隔符,第一次看到它。 - Melon
我刚刚编辑了我的答案,如果它是动态的,也将其作为参数发送。 - mehmatrix

0

试试这个:

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

searchId是从用户那里获取的,在数据库中它是id。就像你说的,我尝试了但没有起作用。 - murtaza.webdev
每个东西都是动态的(即前缀、分隔符和后缀)根据顺序变化。 - murtaza.webdev
@murtaza.webdev 它基于ID进行检查。它忽略前缀和后缀。 - Saharsh Shah
1
@murtaza.webdev 在某个时候你需要一些模式。如果你不使用任何模式,并从LIKE字符串中删除“ - ”,那么它也会获取123,1234,12345,123456,如果你想要查找ID为123的记录。 - Saharsh Shah
尝试使用以下代码:SELECT * FROM orders WHERE searchId LIKE CONCAT('%', id, '%');但你可能会遇到@SaharshShah所评论的问题。 - Melon

0

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

  • 编程语言用于编程、逻辑、解析等,SQL用于定义您想从数据中获取什么。
  • 不要忘记使用像?这样的参数,否则您可能会面临 SQL注入的风险。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接