SQL查询以选择包含"单位分隔符"字符的字符串

ank*_*kit 9 mysql sql select ascii character-encoding

我有这样的表 在此输入图像描述

我想得到那些内容Unit Separator的记录 在此输入图像描述

我尝试了很多东西,但没有得到结果.我尝试了char(31)0x1f许多其他方法,但没有得到理想的结果.这是我的查询,我尝试

SELECT * FROM `submissions_answers` WHERE `question_id`=90 AND `answer` like '%0x1f%'
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?请帮我..

Ste*_*ers 6

问题

您尝试的表达式将无法正常工作,因为answer LIKE '%0x1f%'它正在寻找一个字符串'0x1f'作为其中一部分的字符串- 它不会转换为ASCII代码.

解决方案

应该起作用的这部分表达的一些替代方案是: -

  1. answer LIKE CONCAT('%', 0x1F, '%')
  2. answer REGEXP 0x1F
  3. INSTR(answer, 0x1F) > 0

进一步考虑

如果这些都不起作用那么可能还有其他可能性.你确定字符串中的字符实际上是0x1F?我只是问,因为我尝试的第一件事是粘贴␟但事实证明MySQL将其视为226的十进制字符代码而不是31.不确定您使用的0x1F是哪个客户端但是如果字符在字符串中,则可能实际上并没有出现在输出中.

演示

一些测试证明了以上几点:SQL小提琴演示


Lui*_*uot 4

您可以使用:

SELECT * FROM submissions_answers WHERE question_id=90 AND instr(answer,char(31))>0
Run Code Online (Sandbox Code Playgroud)

这里的关键字是INSTRMySQL 函数,您可以在此处阅读有关该函数的信息char(31)此函数返回子字符串 ( ) 在字符串 ( ) 中第一次出现的位置answer