PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Warum ist '2'> '10'?

Ich denke, PostgreSQL versucht automatisch, den Typ hinter den Kulissen herauszufinden, und unter Linux versucht es, das ' ' loszuwerden, einige der Vergleiche basieren auch auf dem Gebietsschema.

  • Also ' 2' > '10' wird zu '2'>'10' und der Vergleich ist '2'>'1'; Sie sind nicht gleich, also brauchen Sie nicht mit dem Rest der Zeichenfolge fortzufahren, und ascii('2') ist größer als ascii('1') , wird also als wahr ausgewertet.

  • Wenn es sich um eine Gleichheitsoperation handeln würde (z. B. „22“ =„22“), würde dies zu „false“ führen, da Postgres einen Byte-für-Byte-Vergleich durchführt. Dies ist wichtig, da die Engine beim Vergleichen zwei verschiedene Algorithmen verwendet.

  • Wenn Sie den Typ per Typumwandlung angeben, werden die Leerzeichenregeln nicht außer Kraft gesetzt (' '=>'' ).

Gutschrift geht auch an: RhodiumToad und Peerce in #postgresql