recherche

Maison  >  Questions et réponses  >  le corps du texte

La comparaison SQL entre les valeurs booléennes peut conduire à des résultats inattendus

<p>Pourquoi la plupart (toutes ?) des bases de données SQL donnent-elles les résultats suivants : </p> <pre class="brush:php;toolbar:false;">SELECT FALSE < SELECT VRAI < -- FAUX / 0 Ok SELECT NOT(FALSE) < FALSE; -- VRAI / 1 Quoi ? SELECT NOT(TRUE) < FALSE; -- VRAI / 1 Quoi ? ? ≪/pré> <p>Juste pour vérifier : </p> <pre class="brush:php;toolbar:false;">SELECT NOT(TRUE) = FALSE -- TRUE / 1 Ok SELECT NOT(FALSE) = VRAI ; -- VRAI / 1 Ok</pre> <p>Dans Postgres, je peux également vérifier : </p> <pre class="brush:php;toolbar:false;">SELECT pg_typeof(TRUE), pg_typeof(NOT(FALSE)); -- booléen | booléen</pre> <p>J'ai essayé PostgreSQL, SQLite3 et MariaDB et ils donnent tous les mêmes résultats inattendus. </p><p> <strong>Qu'est-ce qui me manque ? </strong></p>
P粉982009874P粉982009874533 Il y a quelques jours592

répondre à tous(1)je répondrai

  • P粉513316221

    P粉5133162212023-08-19 09:07:28

    Je ne suis pas sûr NOT(FALSE) 是如何评估的,但 NOT 不是一个函数。如果你想要对一个布尔字面量取非,那么括号应该放在整个表达式的周围,即使用 (NOT FALSE) 而不是 NOT(FALSE). Prenons l'exemple suivant :

    SELECT (NOT FALSE) < FALSE; -- 0,与 TRUE < FALSE 相同
    SELECT (NOT TRUE) < FALSE; -- 0,与 FALSE < FALSE 相同
    

    répondre
    0
  • Annulerrépondre