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%'