SQLite Forum

operator precedence docs missing, suggested clarifications below
Login
Below is near-final. Rendering caveats still apply. Comments on content are welcome.

-= -= -= -= -= -= -= -= 

<h1 id="operators_parse_affecting_attributes"><span>2. </span>Operators, Parse-Affecting Attributes</h1>
SQLite understands these operators, listed
 in precedence<sup>1</sup> order (highest to lowest):
<p>


</p><table width="80%" border="1" border-collapse="collapse" line-height="1.2">
  <tr align="center">
    <th width="45%" scope="col" text-align="center">Operators<sup>2</sup></th>
    <th width="35%" scope="col" text-align="left">Traits<sup>3</sup></th>
  </tr>
  <tr align="center">
    <td>~&nbsp;&lsqb;expr&rsqb;&nbsp;&nbsp;&nbsp;&nbsp;+&nbsp;&lsqb;expr&rsqb;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;&lsqb;expr&rsqb;</td>
    <td align="left">&middot;(&middot;x), unary prefix</td>
  </tr>
  <tr align="center">
    <td>&lsqb;expr&rsqb;&nbsp;COLLATE&nbsp;(collation-name)<sup>4</sup></td>
    <td align="left">&nbsp;unary postfix</td>
  </tr>
  <tr align="center">
    <td>||</td>
    <td align="left">(x&middot;y)&middot;z, binary </td>
  </tr>
  <tr align="center">
    <td>*&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;%</td>
    <td align="left">(x&middot;y)&middot;z,&nbsp;binary</td>
  </tr>
  <tr align="center">
    <td>+&nbsp;&nbsp;&nbsp;-</td>
    <td align="left">(x&middot;y)&middot;z, binary</td>
  </tr>
  <tr align="center">
    <td>&amp;&ensp;&nbsp;|&nbsp;&nbsp;&nbsp;&lt;&lt;&ensp;&nbsp;&gt;&gt;</td>
    <td align="left">(x&middot;y)&middot;z,&nbsp;binary</td>
  </tr>
  <tr align="center">
    <td>ESCAPE&nbsp;&lsqb;expr&rsqb;</td>
    <td align="left">&nbsp;unary postfix<sup>5</sup></td>
  </tr>
  <tr align="center">
    <td>
      &lt;&nbsp;&nbsp;&gt;&nbsp;&nbsp;&lt;=&nbsp;&nbsp;&gt;=
    </td>
    <td align="left">(x&middot;y)&middot;z,&nbsp;binary</td>
  </tr>
  <tr align="center">
    <td>=&nbsp;&nbsp;==&nbsp;&nbsp;&lt;&gt;&nbsp;&nbsp;!=&nbsp;&nbsp;IS&nbsp;&nbsp;&nbsp;IS&nbsp;NOT<br>
      &lsqb;expr&rsqb;&nbsp;BETWEEN&nbsp;&lsqb;expr&rsqb;&nbsp;AND&nbsp;&lsqb;expr&rsqb;<sup>&ensp;</sup><br>
      IN&nbsp;&nbsp;MATCH&nbsp;&nbsp;LIKE&nbsp;&nbsp;REGEXP&nbsp;&nbsp;GLOB<sup>&ensp;</sup><br>
      &lsqb;expr&rsqb;&nbsp;ISNULL&nbsp;&nbsp;&lsqb;expr&rsqb;&nbsp;NOTNULL&nbsp;&nbsp;&nbsp;&lsqb;expr&rsqb;&nbsp;NOT&nbsp;NULL
    </td>
    <td align="left">(x&middot;y)&middot;z,&nbsp;binary<br>
      (x&middot;y)&middot;z,&nbsp;ternary&nbsp;<sup>6</sup><br>
      (x&middot;y)&middot;z,&nbsp;binary&nbsp;<sup>6</sup><br>
      &nbsp;unary postfix</td>
  </tr>
  <tr align="center">
    <td>NOT&nbsp;&lsqb;expr&rsqb;</td>
    <td align="left">&nbsp;unary prefix</td>
  </tr>
  <tr align="center">
    <td>AND</td>
    <td align="left">(x&middot;y)&middot;z,&nbsp;binary</td>
  </tr>
  <tr align="center">
    <td>OR</td>
    <td align="left">(x&middot;y)&middot;z,&nbsp;binary</td>
  </tr>
</table>
<p>
<b>1.</b> Operators shown within the same table cell share precedence.<br>
<b>2.</b> "&lsqb;expr&rsqb;" denotes operand locations for non-binary operators.<br>
<b>3.</b> "x&middot;(y&middot;z)", "(x&middot;y)&middot;z" and similar denote associativity.<br>
<b>4.</b> The COLLATE clause (with its collation-name) acts as a single postfix operator.<br>
<b>5.</b> This suffix can only bind to a preceding &lsqb;expr&rsqb; LIKE &lsqb;expr&rsqb; expression.<br>
<b>6.</b> Each keyword in (BETWEEN IN GLOB LIKE MATCH REGEXP) may
 be NOT-prefixed with the same precedence and associativity.
</p>