AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 168134
Accepted
Dave
Dave
Asked: 2017-03-25 12:11:44 +0800 CST2017-03-25 12:11:44 +0800 CST 2017-03-25 12:11:44 +0800 CST

查找列不包含“空格”的行

  • 772

我正在使用 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.

postgresql postgresql-9.5
  • 3 3 个回答
  • 17068 Views

3 个回答

  • Voted
  1. Best Answer
    ypercubeᵀᴹ
    2017-03-28T01:10:38+08:002017-03-28T01:10:38+08:00

    我建议您明确提供您希望被视为“空白”并排除在正则表达式中的字符:

    where name !~ '[ \t\v\b\r\n\u00a0]'
    

    人物:

    \s         white space (space, \r, \n, \t, \v, \f)
    ' '        space
    \t         (horizontal) tab
    \v         vertical tab
    \b         backspace
    \r         carriage return
    \n         newline
    \f         form feed
    \u00a0     non-breaking space
    ---
    

    有关模式匹配,请参阅文档。

    在您的示例中,请注意这是非中断空间 (00A0)\xC2A0的 UTF-8 表示。

    • 10
  2. John K. N.
    2017-03-28T01:36:15+08:002017-03-28T01:36:15+08:00

    根据以下 Unicode 列表,存在大量空格字符:

    “分隔符,空格”类别中的 Unicode 字符

    我会将ypercubeᵀᴹ 回答中的 where 子句扩展为:(
    编辑:在字符串开头添加 \]

    where name !~ '[\u0020\u00A0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202f\u205f\u3000]'
    

    人物:

    u0020 SPACE
    u00A0 NO-BREAK SPACE
    u1680 OGHAM SPACE MARK
    u2000 EN QUAD
    u2001 EM QUAD
    U2002 EN SPACE
    u2003 EM SPACE
    u2004 THREE-PER-EM SPACE
    u2005 FOUR-PER-EM SPACE
    u2006 SIX-PER-EM SPACE
    u2007 FIGURE SPACE
    u2008 PUNCTUATION SPACE
    u2009 THIN SPACE
    u200A HAIR SPACE
    u202f NARROW NO-BREAK SPACE
    u205f MEDIUM MATHEMATICAL SPACE
    u3000 IDEGRAPHIC SPACE
    

    ....并再次测试和测试。

    • 5
  3. Evan Carroll
    2017-03-27T19:49:09+08:002017-03-27T19:49:09+08:00

    我试过where not (name ~ '[[:space:]]')'了,它返回“JASON BLAKE”,上面的字节序列相同,\x4a41534f4ec2a0424c414b45.

    我假设字节序列是 UTF8:

    SELECT
      string,
      string NOT LIKE '% %' AS simple,
      string ~ '^\S*$' AS regexp_oppr,
      string !~ '[[:space:]]' AS regexp_oppr_posix
    FROM ( VALUES
      ('THIS HAS A SPACE IN THE MIDDLE'),
      ('   BEFORE'),
      ('AFTER    '),
      ('NONE_NONE_NONE'),
      (' | JASON FALKNER'),
      (convert_from('\x4a41534f4ec2a0424c414b45'::bytea, 'UTF8'))
    ) AS t(string);
    

    输出这个

                 string             | simple | regexp_oppr | regexp_oppr_posix 
    --------------------------------+--------+-------------+-------------------
     THIS HAS A SPACE IN THE MIDDLE | f      | f           | f
        BEFORE                      | f      | f           | f
     AFTER                          | f      | f           | f
     NONE_NONE_NONE                 | t      | t           | t
      | JASON FALKNER               | f      | f           | f
     JASON BLAKE                    | t      | t           | t
    (6 rows)
    

    如果我假设JASON BLAKE是 utf8 是正确的,那么所有提到的方法都会检测其中的空间(其中的方法^\S*$是我自己添加的)。

    • 2

相关问题

  • 我可以在使用数据库后激活 PITR 吗?

  • 运行时间偏移延迟复制的最佳实践

  • 存储过程可以防止 SQL 注入吗?

  • PostgreSQL 中 UniProt 的生物序列

  • PostgreSQL 9.0 Replication 和 Slony-I 有什么区别?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve