cari

Rumah  >  Soal Jawab  >  teks badan

Perbandingan SQL antara nilai boolean boleh membawa kepada hasil yang tidak dijangka

<p>Mengapa kebanyakan (semua?) pangkalan data SQL memberikan hasil berikut: </p> <pre class="brush:php;toolbar:false;">PILIH SALAH < PILIH BETUL < PILIH TIDAK(SALAH) < PILIH TIDAK(BENAR) < ? </pra> <p>Hanya untuk menyemak semula: </p> <pre class="brush:php;toolbar:false;">PILIH TIDAK(BENAR) = SALAH -- BENAR / 1 Ok PILIH TIDAK(SALAH) = BENAR -- BENAR / 1 Ok</pre> <p>Dalam Postgres saya juga boleh menyemak: </p> <pre class="brush:php;toolbar:false;">SELECT pg_typeof(TRUE), pg_typeof(NOT(FALSE)); -- boolean |. <p>Saya telah mencuba PostgreSQL, SQLite3 dan MariaDB dan semuanya memberikan hasil yang tidak dijangka yang sama. </p><p> <strong>Apa yang saya hilang? </strong></p>
P粉982009874P粉982009874539 hari yang lalu605

membalas semua(1)saya akan balas

  • P粉513316221

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

    Saya tidak pasti NOT(FALSE) 是如何评估的,但 NOT 不是一个函数。如果你想要对一个布尔字面量取非,那么括号应该放在整个表达式的周围,即使用 (NOT FALSE) 而不是 NOT(FALSE). Pertimbangkan contoh berikut:

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

    balas
    0
  • Batalbalas