当前位置: 首页 > 面试题库 >

如何对单个空格进行字符串比较

许兴文
2023-03-14
问题内容

我想检查一列是否有任何值为单个空格字符的值。

我最初以为

WHERE my_column = ' '

会很明智的。但不是。由于某些原因,这还将匹配具有多个空格的列:

SELECT '    ' = ' '           => true

因此,我可以使用正则表达式或十六进制编码进行测试:

WHERE HEX(my_column) = '20'
WHERE my_column REGEXP '^\ $'

两者都可以。但是我怀疑两者(肯定是后者)效率都非常低下。

有没有更好的办法?


问题答案:

BINARY比较两个串的需要精确匹配

通常情况下,比较中不考虑尾随空格,但BINARY运算符会强制其为:

BINARY还导致尾随空格很大。

mysql> SELECT BINARY '   ' = ' ';
+--------------------+
| BINARY '   ' = ' ' |
+--------------------+
|                  0 |
+--------------------+

顺便说一句,受尾随空白问题影响的不仅仅是纯空白比较:

mysql> SELECT 'abc   ' = 'abc';
+------------------+
| 'abc   ' = 'abc' |
+------------------+
|                1 |
+------------------+

…但…

mysql> SELECT BINARY 'abc   ' = 'abc';
+-------------------------+
| BINARY 'abc   ' = 'abc' |
+-------------------------+
|                       0 |
+-------------------------+

…甚至更令人困惑的是,领先的空白 重要:

mysql> SELECT ' abc   ' = 'abc';
+-------------------+
| ' abc   ' = 'abc' |
+-------------------+
|                 0 |
+-------------------+

关于索引:

BINARY将防止在字符列上使用索引。但是,文档上的注释建议,如果将运算符应用于比较的字符串文字侧, 则将 使用索引BINARY,如下所示:

SELECT * FROM `tbl` WHERE `col` = BINARY 'string   '


 类似资料:
  • 问题内容: http://golang.org/ref/spec#Comparison_operators Go支持字符串比较,没有任何特殊功能。Go运行时是否在后台进行工作以比较字符串文字? 问题答案: 如下面的程序集转储所示,在进行短路检查以查看两个操作数是否为相同的内存字符串(第11行)之后,将字符串比较从运行时委托给函数(第17行): 除非您在编译器或运行时上工作,否则不要太在意您:只需使

  • 问题内容: 我是Java的新手,为了实践起见,我试图创建一个十六进制到十进制的数字转换器,因为我已经成功地制作了一个二进制到十进制的转换器。 我遇到的问题基本上是将一个字符串中的给定字符与另一个字符串进行比较。这就是我定义要比较的当前字符的方式: 这是我尝试比较角色的方法: 当我尝试通过仅输入数字(例如12)来运行代码时,它可以工作,但是当我尝试使用“ b”时,会出现一个奇怪的错误。这是运行程序的

  • 问题内容: 如果我必须找到一个字符串名称并且它位于表foo中,那么下面是正常过程, 我试图检查它的两个变体, 工作正常 没有正常工作 谁能解释一下第二个为什么不起作用? 提前致谢 问题答案: CHAR类型 使用空字节 将字符串填充到字段的长度(而VARCHAR添加定界符以指示字符串的末尾-因此忽略了末尾的额外数据( 我的意思是空字节 )),因此,在字符串末尾有空格的比较最终将忽略那些。前导空格很重

  • 我有两个数组列表,一个是字符串列表,第二个是Toggle按钮列表。现在我想比较两个数组中的字符串。请帮助我。

  • 问题内容: 我想知道如何在一行中比较多个字符串。我尝试使用|| 但不适用于布尔值或字符串。这是我的代码是什么样的: 对于那些将其标记为重复的对象,我在此处检查了200多个关于堆栈溢出的问题,但没有一个起作用。@Chrylis发布的一个实际上没有帮助。他们只是在问==和.equals()的区别 问题答案: 首先,不要用于字符串。稍后您将了解原因。您想按字符串的内容而不是它们在内存中的位置比较字符串。

  • 问题内容: 我的字符串带有多余的空格,每当有多个空格时,我希望它只有一个。 任何人?我尝试搜索Google,但没有任何帮助。 谢谢 问题答案: 像这样: