我们将以这种形式获得用户的身份证明:
"A-123456-14"
并希望在此格式中使用简单ID搜索数据库:
123456
我试过了
select * from orders where id = '%' + searchId + '%';
这里id = 123456在数据库中,searchId ='A-123456-14'来自用户。
但它不能正常工作
(A:是前缀, - 是分隔符,14是postFix)
请帮我解决这个问题。
答案 0 :(得分:2)
你可以使用:
SELECT * FROM orders WHERE WHERE 'A-123456-14' REGEXP '[:punct:]' + id + '[:punct:]';
在上面你可以用用户输入searchId
替换'A-123456-14'我已经尝试了很好的工作
答案 1 :(得分: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)
答案 2 :(得分:0)
试试这个:
SELECT * FROM orders WHERE searchId LIKE CONCAT('%-', Id, '-%')
答案 3 :(得分:0)
我肯定会使用您选择的编程语言(例如Java或PHP或您正在使用的任何语言)删除不需要的字符串,而不是SQL。然后只需使用select * from orders where id = ?
并将参数设置为编程语言中的"%"+id+"%"
。
?
之类的参数,否则您最多可以打开SQL injection。