My apologies for the previous completely wrong mesage. I got mixed up
with operator meaning & precedence...

On Mon Oct 13, 2014 at 02:39:40PM +0100, Paul Sanderson wrote:
> 
> My actual code is as folows
> 
>   (CASE visits.transition & 0xFFFFFF00  WHEN 0x00800000 THEN 'Blocked'
>     ELSE '' END ||

But I can at least put some better light on your issue. SQLite returns
different results for your style of case/when construct:

    CASE expr WHEN val THEN... 
    
and the alternative which I find reads easier:
    
    CASE WHEN truth_expr THEN...

Here's a demonstration:

    WITH x
    AS (
        SELECT
            0x01 AS a,
            '0x01' AS txt
        UNION ALL SELECT
            0x10,
            '0x10'
        UNION ALL SELECT
            0x01 | 0x10,
            '0x01 | 0x10'
    )
    SELECT
        x.txt,

        CASE
            WHEN x.a & 0x01
            THEN 'A'
            ELSE ''
        END
        || ' ' ||
        CASE
            WHEN x.a & 0x10
            THEN 'B'
            ELSE ''
        END AS result1,

        CASE x.a & 0xff
            WHEN 0x01
            THEN 'A'
            ELSE ''
        END
        || ' ' ||
        CASE x.a & 0xff
            WHEN 0x10
            THEN 'B'
            ELSE ''
        END AS result2
    FROM
        x
    ;

And the results:

    txt         result1     result2   
    ----------  ----------  ----------
    0x01        A           A         
    0x10         B           B        
    0x01 | 0x1  A B                   

-- 
MarkeLawrence
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to