SQL-запрос для выбора строк, содержащих символ "Unit Separator"

У меня есть таблица вроде этого введите описание изображения здесь

Я хочу получить те записи, содержание которых Unit Separator введите описание изображения здесь

Я пробовал много вещей, но не получаю результат. Я пытаюсь с char(31) и 0x1f и многими другими способами, но не получая желаемого результата. Это мой запрос, который я пытаюсь

SELECT * FROM `submissions_answers` WHERE `question_id`=90 AND `answer` like '%0x1f%'

Как я могу это сделать? Пожалуйста, помогите мне..

Ответ 1

Вы можете использовать:

SELECT * FROM submissions_answers WHERE question_id=90 AND instr(answer,char(31))>0

Ключевое слово здесь - это функция INSTR MySQL, которую вы можете прочитать здесь. Эта функция возвращает позицию первого вхождения подстроки (char(31)) в строке (answer).

Ответ 2

Проблема

Выбранное выражение не будет работать, потому что answer LIKE '%0x1f%' ищет строку с буквально '0x1f' как часть ее - она ​​не преобразуется в код ASCII.

Решение

Некоторые альтернативы этой части выражения, которые должны работать: -

  • answer LIKE CONCAT('%', 0x1F, '%')
  • answer REGEXP 0x1F
  • INSTR(answer, 0x1F) > 0

Дальнейшее рассмотрение

Если ни одна из них не работает, тогда может возникнуть дополнительная возможность. Вы уверены, что персонаж, увиденный в строках, на самом деле 0x1F? Я только спрашиваю, потому что первое, что я пробовал, это вставить в ␟, но, оказывается, MySQL видит это как десятичный код символа 226, а не 31. Не уверен, какой клиент вы используете, но если символ 0x1F находится в строке, он может не отображаться на выходе.

Demo

Некоторые тесты, демонстрирующие вышеприведенные пункты: Демо-версия SQL Fiddle

Ответ 3

Еще один способ...

SELECT * FROM `submissions_answers`
    WHERE `question_id`=90
      AND HEX(`answer`) REGEXP '^(..)*1F'

Объяснение регулярного выражения:

  • ^ - начать сопоставление в начале (answer)
  • (..)* - сопоставить любое число (*) двухбайтовых вещей (..)
  • затем сопоставьте 1F, hex для US.

Ответ 4

Вы можете преобразовать столбец ответа в значение HEX, а затем искать значения, содержащие эту шестую строку.

SELECT * FROM `submissions_answers`
WHERE HEX(`answer`) LIKE '%E2909F%'