In MS SQL 2000, through the query analyzer

   SELECT '500' = 500

returns 500 .

   SELECT 500 = '500'

returns 
        Server: Msg 170, Level 15, State 1, Line 1
        Line 1: Incorrect syntax near '='.

Beyond these, I have no preference on whether they are true or false; I am
less worried about what the programming languages say as far as PERL, etc. .
I would rather the return look like the majority vote on what the 'other'
SQL engines/manufacturers do.

--Keith

> -----Original Message-----
> From: D. Richard Hipp [mailto:[EMAIL PROTECTED] 
> Sent: Wednesday, May 12, 2004 5:20 PM
> To: [EMAIL PROTECTED]
> Subject: [sqlite] SQLite version 3 design question: '500'=500?
> 
> 
> The development team is making progress on SQLite version 
> 3.0. But we've run across an interesting puzzle.  What should 
> be returned by this:
> 
>      SELECT '500'=500;
> 
> Is the result "0" or "1"?  In other words, what happens when 
> you compare a number to a string that looks like that number. 
> Are they equal or not?
> 
> Other languages return a mixture of results here.  Strings
> and number compare equal in AWK, Perl, PHP, Tcl, and SQLite 
> version 2.  String and numbers are not equal in Python and Ruby.
> 
> Based on my experience, I would choose to make strings and 
> numbers equal.  But there are complications to that approach 
> in SQLite 3.0.  SQLite 3 supports manifest typing with 4 
> basic types: NULL, NUMERIC, TEXT, and BLOB.  Objects sort in 
> that order:  NULLs first, followed by NUMERICs in numerical 
> order, then TEXT in a user-defined collating sequence and 
> finally BLOBs in memcmp() order.  So '500' occurs at a 
> completely different place in the sort order from 500. If 
> comparison operators are to be consistent with sort order, 
> the following must be true:
> 
>      500 < 600
>      600 < '500'
> 
> But if that is the case, then clearly, '500' != 500.  So
> unless somebody can come up with a better idea, SQLite
> version 3.0 will return "0" for the following:
> 
>     SELECT '500'=500;
> 
> On the other hand, the following two statements will return
> "1" (or true):
> 
>     SELECT '500'+0=500;
>     SELECT '500'=(500||'');
> 
> Note that in other SQL engines, it is an error to compare
> a string to an integer (I think - somebody please correct
> me if I am wrong) so we cannot get any guidance there.
> 
> Your thoughts?
> -- 
> D. Richard Hipp -- [EMAIL PROTECTED] -- 704.948.4565
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to