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

时间:2012-11-08 14:37:06

标签: mysql sql

我想检查列是否包含任何单个空格字符的值。

我最初认为

WHERE my_column = ' '

是明智的。但不是。这也将匹配具有多个空格的列:

SELECT '    ' = ' '           => true

所以我可以使用常规快速或十六进制编码来测试:

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

两者都有效。但我怀疑两者(当然后者)的效率都很低。

有更好的方法吗?

3 个答案:

答案 0 :(得分:11)

完全匹配需要两个字符串BINARY comparison

在正常情况下,比较中不会考虑尾随空格,但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将阻止在字符列上使用索引。但是,a note on the docs表示如果BINARY运算符应用于比较的字符串文字边,则用于

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

答案 1 :(得分:3)

where my_column = ' ' and LENGTH(my_column) = 1

答案 2 :(得分:0)

  

当COL_NAME =''时选择案例'那么'是'ELSE'没有'从桌面'结束作为SPACE_INDICATOR WHERE LENGTH(COL_NAME)= 1;