On Wed, May 12, 2004 at 05:37:49PM -0700, Keith Herold wrote: > 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 '='.
Well that's sure inordinately stupid behavior. The test "A = B" should give the same result as "B = A", at least! In Oracle 8.1.7.4, string '5' does equal integer 5, but you seem to have to ask it via a case statement: SQL> select 5 = 5 from dual; ERROR at line 1: ORA-00923: FROM keyword not found where expected SQL> select case when 5 = '5' then 1 else 0 end as bool from dual; BOOL ---------- 1 SQL> select case when '5' = 5 then 1 else 0 end as bool from dual; BOOL ---------- 1 > > 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||''); That sounds ok to me. Wouldn't it be clearer to have explicit cast statements though, rather than doing weird no-ops like "||''" solely to force a type conversion? Also, since you're introducing manifest typing, it would probably be very handy to have good boolean tests both for "is X currently of type Y?" and "CAN X be of type Y?". E.g., "CAN this thing be an integer?", where by "can" I mean, "Is it currently an integer, or if it is currently stored as a some other type, can it be LOSSLESSLY converted to an integer?" Some languages (e.g., S-Plus), make the latter oddly difficult. (Not THAT difficult; in S you can write that "can be integer" test in 5 lines, but those 5 lines are also somewhat easy to get wrong.) I think that in any system where objects can automatically change type, both the those sorts of "can be" boolean tests should also be built in. -- Andrew Piskorski <[EMAIL PROTECTED]> http://www.piskorski.com/ --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]