PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Por que '2'> '10'?


Eu acho que o PostgreSQL automaticamente tenta descobrir o tipo nos bastidores e no Linux ele tenta se livrar do ' ', algumas das comparações também são baseadas na localidade.

  • Assim, ' 2' > '10' torna-se '2'>'10' e a comparação é '2'>'1'; eles não são iguais, então não há necessidade de continuar com o resto da string, e ascii('2') é maior que ascii('1') , então ele é avaliado como verdadeiro.

  • Se fosse uma operação de igualdade (por exemplo, ' 22' ='22 ') resultaria em false porque o Postgres faz uma comparação byte a byte. Isso é importante porque o mecanismo usa dois algoritmos diferentes ao fazer comparações.

  • Se você especificar o tipo via typecasting, ele não substituirá as regras de espaço (' '=>'' ).

O crédito também vai para: RhodiumToad e Peerce em #postgresql