PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Perché ' 2'> '10'?

Penso che PostgreSQL tenti automaticamente di capire il tipo dietro le quinte e in Linux cerchi di sbarazzarsi di '', alcuni dei confronti sono anche basati sulla locale.

  • Pertanto, ' 2' > '10' diventa '2'>'10' e il confronto è '2'>'1'; non sono uguali, quindi non è necessario continuare con il resto della stringa e ascii('2') è maggiore di ascii('1') , quindi restituisce true.

  • Se fosse un'operazione di uguaglianza (ad es. ' 22' ='22 ') risulterebbe false perché Postgres esegue un confronto byte per byte. Questo è importante perché il motore utilizza due algoritmi diversi durante i confronti.

  • Se specifichi il tipo tramite typecasting, non sovrascriverà le regole dello spazio (' '=>'' ).

Il merito va anche a: RhodiumToad e Peerce in #postgresql