2014-01-07 1 views
4

Мы получим идентификатор от пользователя в таком виде:поле поиска идентификатора базы данных шпагат манипуляции ID

"A-123456-14" 

и хотим найти в базе данных с простым идентификатором в этой форме:

123456 

У меня есть пытался

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

здесь ID = 123456 в базе данных и searchId = 'A-123456-14', который получает от пользователя.

, но он не работает, как его не должным образом

(A: есть префикс, - это разделитель и 14 является Postfix)

Пожалуйста, помогите мне решить эту проблему.

ответ

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 получает от пользователя и в db его id. как вы сказали, я пробовал, но не работал –

+0

@ murtaza.webdev проверить мой обновленный ответ –

+0

(A: префикс, - разделитель и 14 постфикс) каждая вещь является динамической (т. е. префикс, разделитель и постфикс), меняется на порядок –

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

EDIT:

Если вы хотите, чтобы сделать все, что динамический, то вы можете попробовать это (Вы должны размещать разделителем в качестве параметра также, если он динамический) ,

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

(A: префикс, - разделитель и 14 - постфикс), каждая вещь является динамической (т.префикс, разделитель и постфикс) Изменения в порядке –

+0

Я думаю, что это должно работать – Melon

+0

@Melon: '-' не является статическим его динамическим в зависимости от многих критериев порядка (например, динамического разделителя) –

0

Я определенно удалить биты строки вам не нужно, используя язык программирования выбора (например, Java или PHP или что вы используете), а не в SQL. Затем просто используйте select * from orders where id = ? и установите для параметра значение "%"+id+"%" на вашем языке программирования.

  • Языки программирования для программирования логики, разбора и т.д., SQL для определения того, что вы хотите получить от ваших данных
  • Не забудьте использовать параметры, такие как ? иначе вы могли бы открыть себя до SQL injection.
Смежные вопросы