>>mysql> select 798 between 75.2 and 999.1; >>+----------------------------+ >>| 1 | >>+----------------------------+ >> >>mysql> select 798 between 75.2 and 1e30; >>+---------------------------+ >>| 0 | <<<-------- Really? >>+---------------------------+ >> >>mysql> select 798.1 between 75.2 and 1e30; >>+-----------------------------+ >>| 1 | >>+-----------------------------+
OS> tested this against 3.23.45; it's reproducible. The problem OS> appears if the upper range exceeds 0.92233e19 (signed bigint). But OS> the manual states that this is NOT a bug: OS> expr BETWEEN min AND max OS> ... OS> - If expr is an integer expression, an integer comparision is done. OS> - Otherwise, a floating-point (real) comparision is done. OS> ... Hi Oliver, Thanks for your response. I am sorry I did not check the doc's as it struck me as _so_ bizarre that the inconsistency _appeared_ not just to be an int-vs-real problem. If I understand correctly: - When the integer comparison is performed, the min & max are parsed as integers and anything after the first non-digit is ignored, and that works okay-ish for the decimal point for obvious reasons, but of course the exponential syntax doesn't truncate so well! === I'm musing over the implications of this though. I can see that forcing a parser error when the min/max don't match the expected comparison type would have disadvantages, even if it was appropriate just because I had a problem one day ;) I'll go and read the manual in more depth around the S6.2 et seq to see if there's discussion there about it .. if not I'll follow-up with more thoughts :) -- Many thanks, James. --------------------------------------------------------------------- Before posting, please check: http://www.mysql.com/manual.php (the manual) http://lists.mysql.com/ (the list archive) To request this thread, e-mail <[EMAIL PROTECTED]> To unsubscribe, e-mail <[EMAIL PROTECTED]> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php