AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 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

Encontre linhas nas quais a coluna não contém um "espaço"

  • 772

Estou usando o Postgres 9.5. Desejo pesquisar linhas nas quais minha coluna de nome não contém um espaço. Estou um pouco confuso sobre como definir um espaço para você, no entanto. Achei que seria apenas a barra de espaço no meu teclado, então corri:

.... where name not like '% %';

mas depois obtive alguns resultados como este:

 | JASON FALKNER

Isso com certeza parece um espaço para mim, mas provavelmente há algumas outras coisas acontecendo. Existe uma maneira melhor de procurar linhas nas quais minha coluna de nome não contém um espaço?

Usando um regexp, not (name ~ '\s')ainda retornava colunas que pareciam ter um espaço.

Usando:

select cast(name as bytea) ... where name not like like '% %';

retornou:

\x4a41534f4ec2a0424c414b45

No entanto, ainda não tenho certeza de como uso esses dados para descobrir como filtrar os espaços dos meus resultados.

Eu tentei where not (name ~ '[[:space:]]')'e está retornando "JASON BLAKE" com a mesma sequência de bytes acima, \x4a41534f4ec2a0424c414b45.

postgresql postgresql-9.5
  • 3 3 respostas
  • 17068 Views

3 respostas

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

    Sugiro que você forneça explicitamente os caracteres que deseja que sejam considerados como "espaço em branco" e excluídos de um regex:

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

    Personagens:

    \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
    ---
    

    Consulte os documentos para correspondência de padrões .

    Em seu exemplo, observe que \xC2A0é a representação UTF-8 de Non break space (00A0) .

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

    Existe uma infinidade de caracteres de espaço de acordo com a seguinte listagem Unicode:

    Caracteres Unicode na categoria 'Separador, Espaço'

    Eu estenderia a cláusula where na resposta do ypercubeᵀᴹ para:
    (edit: adicionado \ no início da string]

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

    Personagens:

    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
    

    .... e testar e testar novamente.

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

    Eu tentei where not (name ~ '[[:space:]]')'e está retornando "JASON BLAKE" com a mesma sequência de bytes acima, \x4a41534f4ec2a0424c414b45.

    Vou assumir que a sequência de bytes é 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);
    

    Isso produz isso

                 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)
    

    Se eu estava certo em assumir que JASON BLAKEé utf8, todos os métodos mencionados detectam o espaço nele (e o método ^\S*$é minha própria adição).

    • 2

relate perguntas

  • Posso ativar o PITR depois que o banco de dados foi usado

  • Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo

  • Os procedimentos armazenados impedem a injeção de SQL?

  • Sequências Biológicas do UniProt no PostgreSQL

  • Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

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

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve