Нахождение точного значения в MySQL - PullRequest
0 голосов
/ 01 мая 2018

Здравствуйте, я пытаюсь решить проблему, как найти точное значение из строки.

Database

Проблема тогда ищет в столбце StringB значение 1, он находит все строки, содержащие 1. Идея состоит в том, что если я ищу значение 1 в StringB, оно должно найти только точное значение.

Использование LIKE не является идеальным вариантом, так как он будет принимать все строки, содержащие 1, использование = также не является вариантом, так как он ищет одинаковое значение. Также пытался использовать INSTR, но он работает почти так же, как LIKE. То же самое с Locate.

В настоящее время сохраняются форматы:

  • число (пример: "2" без "")
  • номер. (пример: "2." без "")
  • number.number (пример: "2.23.52.12.35" без "")

И они не меняются.

В этом столбце хранятся только цифры, без букв или других типов строк ТОЛЬКО числа (целочисленный тип)

Есть ли способ строго искать значение?

Моя база данных - InnoDB. Спасибо за ваше время.

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Попробуйте использовать REGEXP:

SELECT *
FROM yourTable
WHERE CONCAT('.', StringB, '.') REGEXP CONCAT('[.]', '2', '[.]');

Демо

Мы могли бы также использовать LIKE вместо REGEXP:

SELECT *
FROM yourTable
WHERE CONCAT('.', StringB, '.') LIKE CONCAT('%.', '2', '.%');
0 голосов
/ 01 мая 2018

Если вы делаете:

where stringB = 1

Тогда MySQL должен выяснить, какие типы использовать. По правилам SQL он преобразует '1.00' в число - и они совпадают.

Если вы делаете

where stringB = '1'

Тогда типы делают то, что вы намереваетесь. И значения сравниваются как строки.

Подробнее: сохранять типы согласованными. Никогда не полагайтесь на неявное преобразование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...