我正在使用 Postgres 9.5。我想搜索我的姓名列不包含空格的行。不过,我对如何为您定义空间有点模糊。我以为这只是我键盘上的空格键,所以我跑了:
.... where name not like '% %';
但后来我得到了一些这样的结果:
| JASON FALKNER
这对我来说确实像是一个空间,但可能还有其他一些事情正在发生。有没有更好的方法可以扫描我的名称列不包含空格的行?
使用正则表达式,not (name ~ '\s')
仍然返回看起来像有空格的列。
使用:
select cast(name as bytea) ... where name not like like '% %';
回来:
\x4a41534f4ec2a0424c414b45
但是,我仍然有点不清楚如何使用这些数据来找出如何从我的结果中筛选空间。
我试过where not (name ~ '[[:space:]]')'
了,它返回“JASON BLAKE”,上面的字节序列相同,\x4a41534f4ec2a0424c414b45
.
我建议您明确提供您希望被视为“空白”并排除在正则表达式中的字符:
人物:
有关模式匹配,请参阅文档。
在您的示例中,请注意这是非中断空间 (00A0)
\xC2A0
的 UTF-8 表示。根据以下 Unicode 列表,存在大量空格字符:
“分隔符,空格”类别中的 Unicode 字符
我会将ypercubeᵀᴹ 回答中的 where 子句扩展为:(
编辑:在字符串开头添加 \]
人物:
....并再次测试和测试。
我假设字节序列是 UTF8:
输出这个
如果我假设
JASON BLAKE
是 utf8 是正确的,那么所有提到的方法都会检测其中的空间(其中的方法^\S*$
是我自己添加的)。