2014-01-07 86 views
4

我们会以这种形式获得标识从用户:搜索数据库ID字段

"A-123456-14" 

并希望在数据库以这种形式简单的ID搜索:

123456 

我有试过

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

这里id = 123456在数据库和searchId ='A-123456-14'从用户得到。

,但它不工作作为其无法正常

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

请帮我解决这个问题。

回答

2

你可以使用:

SELECT * FROM orders WHERE WHERE 'A-123456-14' REGEXP '[:punct:]' + id + '[:punct:]'; 
上面你可以替换 'A-123456-14'

与用户输入searchId

我已经试过它的做工精细

+0

其工作正常... –

0

试试这个:

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

searchId从获得用户和在其数据库中的ID。正如你所说我尝试过但不工作 –

+0

@ murtaza.webdev检查我更新的答案 –

+0

(答:是前缀, - 是分隔符,14是postFix)每个事物都是动态的(即前缀,分隔符和后缀)变化,编号为 –

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) 
+0

(答:是前缀, - 是分隔符,14是postFix)每一件事情都是动态的(即,前缀,分隔符和后缀)更改accroding按顺序 –

+0

我认为这应该工作 – Melon

+0

@Melon:' - '是不是静态的动态取决于顺序的许多标准(如动态分隔符) –

0

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

  • 编程语言进行编程,逻辑,分析等,SQL是定义你想从你的数据中获得什么
  • 不要忘记使用像?参数,否则,你可以打开自己到SQL injection