This is probably the last take, unless a compelling argument shows it should not be: =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* <h1 id="operators_and_parse_affecting_attributes"><span>2. </span>Operators, and Parse-Affecting Attributes</h1> SQLite understands these operators, listed in precedence<sup>1</sup> order (highest to lowest): <p></p> <table width="50%" border="1" border-collapse="collapse" line-height="1.2"> <tr align="center"> <td text-align="center"><b>Operators <sup>2</sup> <sup>3</sup></b></td> </tr> <tr align="center"> <td>~ [expr] + [expr] - [expr]</td> </tr> <tr align="center"> <td>[expr] COLLATE (collation-name) <sup>3</sup></td> </tr> <tr align="center"> <td>||</td> </tr> <tr align="center"> <td>* / %</td> </tr> <tr align="center"> <td>+ -</td> </tr> <tr align="center"> <td>&  | <<  >></td> </tr> <tr align="center"> <td>ESCAPE [expr] <sup>4</sup></td> </tr> <tr align="center"> <td>< > <= >=</td> </tr> <tr align="center"> <td>= == <> != IS IS NOT<br> [expr] BETWEEN<sup>5</sup> [expr] AND [expr]<sup> </sup><br> IN<sup>5</sup> MATCH<sup>5</sup> LIKE<sup>5</sup> REGEXP<sup>5</sup> GLOB<sup>5</sup><br> [expr] ISNULL [expr] NOTNULL [expr] NOT NULL </td> </tr> <tr align="center"> <td>NOT [expr]</td> </tr> <tr align="center"> <td>AND</td> </tr> <tr align="center"> <td>OR</td> </tr> </table> <p> <b>1.</b> Operators shown within the same table cell share precedence.<br> <b>2.</b> "[expr]" denotes operand locations for non-binary operators.<br> Operators with no "[expr]" adjunct are binary and left associative. <br> <b>3.</b> The COLLATE clause (with its collation-name) acts as a single postfix operator.<br> <b>4.</b> The ESCAPE clause (with its escape character) acts as a single postfix operator.<br> It can only bind to a preceding [expr] LIKE [expr] expression.<br> <b>5.</b> Each keyword in (BETWEEN IN GLOB LIKE MATCH REGEXP) may be prefixed<br> by NOT, retaining the bare operator's precedence and associativity. </p>