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
.
Sugiro que você forneça explicitamente os caracteres que deseja que sejam considerados como "espaço em branco" e excluídos de um regex:
Personagens:
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) .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]
Personagens:
.... e testar e testar novamente.
Vou assumir que a sequência de bytes é UTF8:
Isso produz isso
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).